🍟 서론
그냥 교제 문제이긴 하지만, 369가 생각 보다 만들기 어려워가지고 좀 많이 해메었다. 한 혼자 2시간 넘게 생각해도 답이 안 나와서 결국 GPT의 도움을 받아서 해결했다.
그거 아시는가? 369에 박수 한 번 치게 만드는 것은 그나마 할만 했다. 하지만 3이 중복되거나 두 개의 숫자가 중복이 될때
박수를 두 번치게 하는 게 필자는 굉장히 어려웠다.
뭔가 풀릴 것 같으면서도 풀리지 않았다. 이렇게 풀리지 않았던 문제는 다시 곱씹어보고자 하는 마음에 제대로 블로그에 정리해서 올린다.
🥭 클라이언트 요구사항
클라이언트는 교재이다. ㅎㅎ;; 아래는 그 내용이다.
369게임을 만들어보자. 369게임은 3,6,9가 포함되어 있으면 3,6,9의 개수 만큼 박수를 치는 게임이다. 1부터 50까지의 정수에 대하여 3,6,9 게임을 실행한다.
Target Output
1 2 짝 4 5 짝 7 8 짝 10 11 12 짝...
🍐 첫 번째 미션
배열을 생성한다. 3,6,9 게임을 하기 전에1~50까지의 정수에서
라는 클라이언트의 지시가 있었으므로 배열을 먼저 생성한다.
- 배열 50공간을 생성하였다. 정수가 아니라 문자로 해야지
문자별 판독이 가능
하다. 그리하여String[]
배열로 생성하였다. tsn은 three six nine의 약자다. ㅎㅎ
new 키워드는 배열을 담는 공간
일 뿐이다. 이 공간에 우리가 진짜 원하는 정보를 넣어야 배열이 준비가 된다.
- 여기서 내가 몰랐던 키워드가 나왔는데, 바로
String.valueOf()
이다. 아까 챗GPT의 도움을 받았다고 했는데, 문법을 모르는 것은 물어볼 수 있다고 생각한다. - 이 키워드로 50바퀴도는 for구문에서
증가되는 모든 수를 +1을 해서 대입
하게 될 것이다. 우리가 원하는 것은 1부터 50까지 이니까!
메모!
String.valueOf()
String.valueOf()
는 기본적인 데이터 타입(예: int, long, float, double 등) 또는 객체를 입력받아 해당 값을 문자열로 변환해주는 메소드
이다.🍓 두 번째 미션
배열을 순회하는 기능만들기 순회하면서 각 문자 검사하는 기능만들기
- 이 코드가 가장 어려웠다. 하지만 왜 이렇게 구성이 되었는지는 이해는 된다. 그런데 분한 것은 내가 아는 코드 논리로 구현이 가능했다는 것이다… 좀 만 더 고민해 볼 걸 그랬나. 암튼 이 코드 블럭을 자세하게 묘사할 것이다.
for (String a : tsn){}
로 tsn의 각 요소를 순회하는 코드를 구성한다.
int count = 0
count는 이후에 박수를 치기위한 조건을 카운팅 하기위해 선언되었다.
for (int i = 0; i < a.length(); i++)
은 tsn의 각 배열에 들어가 있는 문자열의 길이만큼 순회하기 위한 것이다(a.length()
코드). 예를 들어 1이 들어가 있으면 한 번 순회, 10이 들어가 있으면 두 번 순회 함으로서, 1의 자리 수와 10의 자리 수에 들어가 있는 3,6,9를 검사하기 위한 준비 작업이다.
char c = a.charAt(i)
이 문법을 몰라가지고 문자열 길이 만큼 순회하는 for문을 생각할 수 없었던 것 같다.charAt()
은 특정 위치에 있는 문자를 반환하기 위한 코드이다.이 코드 덕분에 ‘33’ 을 두번 카운팅
할 수 있게 해준다.
if (c == '3' || c == '6' ||c == '9')
는 OR 논리 연산자를 활용하여, 각 배열이 3또는 6 또는 9를 포함하는 지 검사하고 있다면은 true를 반환하여count++
를 누적하게 된다.
메모!!
charAt()
charAt()
메서드는 Java에서 String
객체의 특정 인덱스에 위치한 문자를 반환하는 데 사용된다. 이 메서드는 문자열 내에서 주어진 인덱스에 해당하는 문자(character)를 반환한다.
예를 들어, “36” 이 문자열일 경우
에 charAt(1)
은 ‘6’
이 되고 charAt(0)
은 ‘3’
이된다.🥑 세 번째 미션
3,6,9로 count된 수 만큼 박수 치게 만들기
- 이 구문이 배열을 순회하는 코드 블럭 안에 있다는 거 명심!
- 3,6,9가 없어서
count가 되지 않았다면 이 블럭은 실행되지 않고
else구문에서 나머지 문자열을 출력하게 된다.
“, “
부분은 가독성을 위해서 추가되었다.
✌️결과
public class ex03Exam03_blog { public static void main(String[] args) { // tsn이라는 문자를 저장할수 있는 배열 50공간 선언 String[] tsn = new String[50]; // 배열 순차적 공간에 1부터 50까지 대입 for (int i = 0; i < 50; i++) { tsn[i] = String.valueOf(i + 1); } // 배열의 각 요소를 순회 for (String a : tsn){ int count = 0; //각 배열요소의 문자열수만큼 순회, 1= 1회, 20=2회 for (int i = 0; i < a.length(); i++) { char c = a.charAt(i); //각 배열요소의 문자하나씩 대입 if (c == '3' || c == '6' ||c == '9'){ count++; } } if (count > 0){ for (int j = 0; j < count; j++) { System.out.print("짝"); } System.out.print(", "); }else{ System.out.print(a + ", "); } } } }
- 보시다시피 33에서 박수를 두 번 치는 것을 볼 수 있다. 이게 생각 보다 어려워서 시간을 많이 고민했지만 헛되이 하고 싶지 않아 기록으로 남기게 되었다.
Share article