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

JIHYUN·2021년 10월 9일
0
post-thumbnail

📌 문제

어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다.
수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.

📌 입력

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

📌 출력

각 줄마다 주어진 수가 팰린드롬수면 'yes', 아니면 'no'를 출력한다.

📌 예제 입력

📌 사용언어 : JAVA

📌 solution

import java.util.Scanner;

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

😎 풀이

일단 주어진 수를 String타입으로 바꾼 후 그 길이를 반으로 나눈다. 그렇게 나눈 반쪽을 하나는 앞에서부터, 하나는 뒤에서부터 꺼내어 비교하여 가운데로 갈 때까지 모두 같다면 YES를, 하나라도 다를 시에는 NO를 출력하도록 한다.
그렇게 하기 위해서 일단 while문을 설정하고, 숫자를 계속해서 받아준다. 그리고 받아온 숫자가 0일 시에 while문을 탈출하도록 한다. 아니라면 int타입인 cnt를 설정한 후, 받아온 숫자를 String타입으로 변환한다. 그렇게 하면 한 글자씩 꺼내오기 수월하다. 그렇게 변환한 문자의 길이를 반으로 쪼갠 만큼 for문을 반복해준다. for문 안에는 if문으로 i번째 문자와 뒤에서 i번째 문자를 비교하여 같다면 cnt를 1 증가시켜준다. 이렇게 증가시킨 cnt가 문자열의 길이를 반으로 나눈 값과 같다면 yes를, 아니라면 no를 출력한다.

profile
이것저것 공부중

0개의 댓글