사실 이번 풀이는 난이도랄게 없다.
언어마다 풀이 방법이 다를 수 있겠으나 (예를 들어 문자열을 뒤집는 메소드가 있다던지...그럼 더 쉬워질듯)
이번 문제풀이에서 핵심은 입력한 문자열을 어떻게 뒤집어 기존 입력값과 비교할 것인가 이었다.
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이 입력되면 입력한 문자열을 계속 한 줄씩 받아들이는 반복문을 탈출하게 하여 프로그램을 종료케 하였다.
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] 백준 문제풀이(9733번 : 꿀벌) (0) | 2022.12.06 |
---|---|
[JAVA] 백준 문제풀이(9625번 : BABBA) (0) | 2022.11.29 |
[JAVA] 백준 문제풀이 (10820번: 문자열 분석) (0) | 2022.06.04 |
[JAVA] 백준 문제풀이 (15351번: 인생 점수) (0) | 2022.06.04 |
[자바] BigInteger 문제(feat. 백준 1271번) (0) | 2021.07.24 |