문제를 처음 풀 때 쉬워보이는 나머지 입력 형태에 대한 생각을 하지 않고 풀이를 했다. 문제 풀이를 할 때 처음으로 주목해야 할 것은 "입력과 출력이 어떤 방식으로 이뤄지고 있는지"이다. 문제에서 볼 수 있듯이 입력은 여러 개의 테스트 케이스로 이쿼져 있고 출력의 경우 각 줄마다 주어진 수가 펠린드롬 수면 'yes'와 아니면 'no'를 출력해주는 것이다. 일단 이 부분에 대해 숙지해야 그 이후의 풀이 과정을 잘 작성할 수 있다.
이번 문제는 문자열을 하나씩 잘라서 char[]에 넣어주는 str.toCharArray()
메소드를 이용하여 풀이했다.
가장 헤맸던 부분은 0이 입력되었을 때 반복문을 나가서 더이상 입력을 받지 않고 아래 과정을 시행하지 않고 완전히 종료하는 부분이었다. 해당 부분을 해결해보려다가 잘 풀리지 않아 답안을 찾아보았다. while(true)
반복문과 자바에서 반복문을 제어해주는 break
와 continue
같은 것들을 어떻게 사용하는지가 관건이었다.
cf. .toCharArray()
메소드를 쓰기 위해
[Java] int를 String으로, String을 int로 바꾸는 방법
포스팅을 작성하고 정리해보았다.
break는 만나는 즉시 부분반복뿐만 아니라 포함된 전체 반복문을 즉시 탈출
continue는 만나면 해당 반복부분 탈출 후 다음 번 반복 실행
여기까지는 잘 풀었다.
package december_first;
import java.util.Scanner;
public class baek_1259 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
if (num == 0) {
sc.close();
}
String str = String.valueOf(num);
char[] arr = str.toCharArray();
System.out.println(arr.length);
System.out.println(arr[0]);
if (arr.length != 1 && arr[0] != 0) { //0이 입력됐을 때 진행하지 않음
int count = 0;
for(int i = 0; i < arr.length/2; i++) { // 배열의 길이만큼 반복문 돌아야! length 사용
if(arr[i] == arr[arr.length-(i+1)]) {
count++;
}
}
if(count == arr.length/2) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
}
}
그러나 이 부분을 버벅였다. 애초에 문제를 처음 풀이할 때 어떤 방식으로 입력받고 출력되는지 잘 파악했어야 하는데 잘 하지 못했다. 다른 분의 코드를 참고하여 위의 필수 개념을 적용한 풀이를 해보았다.
package december_first;
import java.util.Scanner;
public class baek_1259_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
int num = sc.nextInt();
if(num == 0) break; // 0이 나오면 반복문을 나간다
String str = String.valueOf(num);
char[] arr = str.toCharArray();
int count = 0;
for(int i = 0; i < arr.length/2; i++) { // 배열의 길이만큼 반복문 돌아야! length 사용
if(arr[i] == arr[arr.length-(i+1)]) {
count++;
}
}
if(count == arr.length/2) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
sc.close();
}
}