[백준] 1259번 : 펠린드롬 수

letsbebrave·2021년 12월 7일
0

codingtest

목록 보기
8/146

문제

깨달은 점

문제를 처음 풀 때 쉬워보이는 나머지 입력 형태에 대한 생각을 하지 않고 풀이를 했다. 문제 풀이를 할 때 처음으로 주목해야 할 것은 "입력과 출력이 어떤 방식으로 이뤄지고 있는지"이다. 문제에서 볼 수 있듯이 입력은 여러 개의 테스트 케이스로 이쿼져 있고 출력의 경우 각 줄마다 주어진 수가 펠린드롬 수면 'yes'와 아니면 'no'를 출력해주는 것이다. 일단 이 부분에 대해 숙지해야 그 이후의 풀이 과정을 잘 작성할 수 있다.

필수개념

이번 문제는 문자열을 하나씩 잘라서 char[]에 넣어주는 str.toCharArray()메소드를 이용하여 풀이했다.
가장 헤맸던 부분은 0이 입력되었을 때 반복문을 나가서 더이상 입력을 받지 않고 아래 과정을 시행하지 않고 완전히 종료하는 부분이었다. 해당 부분을 해결해보려다가 잘 풀리지 않아 답안을 찾아보았다. while(true) 반복문과 자바에서 반복문을 제어해주는 breakcontinue 같은 것들을 어떻게 사용하는지가 관건이었다.

cf. .toCharArray() 메소드를 쓰기 위해
[Java] int를 String으로, String을 int로 바꾸는 방법
포스팅을 작성하고 정리해보았다.

break와 continue

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();

		
	}

}

profile
그게, 할 수 있다고 믿어야 해

0개의 댓글