본문 바로가기
Programming Language/JAVA

[JAVA] 백준 문제풀이(1252번 : 팰린드롬수)

by NeoGul.S 2022. 6. 5.

사실 이번 풀이는 난이도랄게 없다.

 

언어마다 풀이 방법이 다를 수 있겠으나 (예를 들어 문자열을 뒤집는 메소드가 있다던지...그럼 더 쉬워질듯)

 

이번 문제풀이에서 핵심은 입력한 문자열을 어떻게 뒤집어 기존 입력값과 비교할 것인가 이었다.

 

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

 

1259번: 팰린드롬수

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

www.acmicpc.net

문제의 내용은 이렇다

 

문제

어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다.

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

입력

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

출력

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

 

 

말 그대로 121 을 입력하여 이를 뒤집어 121 이면 yes가 출력되게 하고,

153 이 입력되었다면 351이 되니 입력된 값과 일치하지 않기 때문에 no가 나오게 되는 것이다.

 

난이도도 그닥 어렵지 않고 사람마다 생각하는 방식과 주로 애용하는 구현 방식이 다르므로

이 문제를 포스팅할까 말까 고민했는데, 그냥 기록 보관용으로 포스팅 하기로 했다

 

나으 코드는 이렇다.

 

package source;

import java.io.*;

public class test_algo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String line = "";
		
		while((line=br.readLine())!=null) { //다음 읽어들일 내용이 없을때까지
			char Array[] = new char[line.length()]; //반복할때마다 초기화
			int count = 0;
			for(int i=line.length()-1;i>=0;i--) {
				char in = line.charAt(i); //입력값 뒷꽁무니부터 문자 하나씩 입력
				Array[count++]=in; //입력할 문자 배열의 0번째부터 삽입
				//System.out.println(i+"번째 "+Array[i]);
			}
			
			if(line.equals("0"))
				break;
			if(line.equals(String.valueOf(Array))==true)
				System.out.println("yes");
			else if(line.equals(String.valueOf(Array))==false)
				System.out.println("no");
			//System.out.println(String.valueOf(Array));
		}
	}

}

 

코드 핵심은

1. bufferedReader를 이용한 입력한 문자열들을 반복문을 이용해 한줄씩 읽었고

 

2. 읽어온 문자열의 반복문을 통해 문자열 마지막부터 한 글자씩 떼어 선언한 char형 배열의 첫번째부터 역순으로 입력

 

3. char형 배열에 역순으로 입력 후 입력한 문자열과 비교를 위해

equals() 메소드와 String의 valueOf 메소드를 이용하여 char형 배열과 String 데이터가 비교가 가능하게 하였다

*valueOf를 사용, char형 배열이 string 타입으로 변경되게 하였음

 

부연설명할 점이 있다면 문자열의 역순을 배열에 입력하는 반복문 이후,

입력된 값이 0인지 판단하는 조건문이 있는데,

 

문제에서 마지막 줄에 0이 입력되면 이 줄은 문제에 포함시키지 않는다

 

라는 내용이 잘 이해가 안가서 그냥 문자열에 0이 입력되면 프로그램을 종료시킨다는 것으로 해석,

0이 입력되면 입력한 문자열을 계속 한 줄씩 받아들이는 반복문을 탈출하게 하여 프로그램을 종료케 하였다.