본문 바로가기
카테고리 없음

[백준/자바] 1259번: 팰린드롬수

by IT 정복가 2022. 5. 23.
728x90

https://www.acmicpc.net/problem/1259

 

1259번: 팰린드롬수

입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.

www.acmicpc.net


[문제]


[코드]

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int cnt = 0;
		
		while(true) {
			int N = sc.nextInt();
			if(N == 0)
				break;
			String str = Integer.toString(N);
			for(int i = 0; i < str.length()/2; i++) {
				if(str.charAt(i) != str.charAt(str.length()-i-1))
					cnt++;
			}
			if(cnt == 0)
				System.out.println("yes");
			else 
				System.out.println("no");
			cnt = 0;
		}
		sc.close();
	}
}

[설명]

1. 0이 주어지면 프로그램을 종료한다는 것을 보면 while문을 사용하는 것이 좋다고 생각할 수 있다.

2. while문이 무한으로 돌아가면서 정수형 N에 입력을 계속 받는다.

3. 입력 받은 N이 0이면 프로그램을 종료해야하기때문에 if문을 통해 조건을 걸어준다.

4. 입력받은 수의 자리수를 서로 비교하려면 정수형 N을 문자열로 변환 후 한 글자씩 비교해야 한다.

5. 정수형을 문자열로 변환하기 위해 Integer.toString(N)을 사용하여 문자열 변수 str에 넣어준다.

6. 문자열로 바뀐 수를 서로 비교해야한다. 만약 처음에 12321이라는 수를 입력 했다면

0번째 str의 길이-1번째
: 4번째
0번째와 4번째 비교
: 1과 1 비교
1번째 str의 길이-2번째
: 3번째
1번째와 3번째 비교
: 2와 2 비교

7. 이런 식으로 비교하기 위해 for문을 돌려주는데 0번째부터 str 길이/2번째까지만 반복문을 돌려준다.

8. 만약 0번째와 4번째의 값이 같지 않다면 cnt을 증가시켜준다. 같다면 증가하지 않고 0의 값을 계속 유지할 것이다.

9. for문을 빠져나왔을 때 cnt의 값이 0이라면 팰린드롬수를 만족하기때문에 yes를 출력해 주고 아니면 no를 출력해 준다.

10. 다음 N를 입력받아 비교하기 위해 cnt의 값을 다시 0으로 초기화 해준다.


[결과]

728x90