https://www.acmicpc.net/problem/11068
11068번: 회문인 수
어떤 수를 왼쪽부터 읽어도, 오른쪽부터 읽어도 같을 때 이 수를 회문인 수라고 한다. 예를 들어, 747은 회문인 수이다. 255도 회문인 수인데, 16진수로 표현하면 FF이기 때문이다. 양의 정수를 입력
www.acmicpc.net
■문제

■ 문제 이해
이해하기 어려운 문제는 아니다.
입력받은 수 n을 2 ~ 64의 진법으로 변환했을 때 회문(펠린드롬)인 경우가 있는 지 판별하는 문제이다.
바로 풀어보쟈잇
■ 풀이
255를 16진수로 변환했을 때 FF가 나온다.
이처럼 10진수가 넘는 진법은 문자로 저장되어야 하는데 예를 들어 64진법으로 변환할 땐 어떻게 처리해야 하지?
라는 고민을 하였다.
이는 생각보다 간단한 방법으로 해결할 수 있었다.
255를 16진수로 변환하면 => F F가 나온다. 이때, F를 그냥 15로 저장하는 것이다.
즉, 문자로 변환하지 않고 배열에 10진수 그대로 저장하는 것이다.
10진수로 변환된 배열의 시작점과 끝점을 비교하며 회문인지 판별하면 된다. (투 포인터 사용)
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
int num = Integer.parseInt(br.readLine());
boolean isPalindrome = false;
for (int radix = 2; radix <= 64; radix++) {
if (checkPalindrome(num, radix)) {
isPalindrome = true;
break;
}
}
sb.append(isPalindrome ? "1" : "0").append("\n");
}
System.out.println(sb);
}
private static boolean checkPalindrome(int num, int radix) {
ArrayList<Integer> numList = new ArrayList<>();
while (num > 0) {
numList.add(num % radix);
num /= radix;
}
int start = 0;
int end = numList.size() - 1;
while (start <= end) {
if (numList.get(start) != numList.get(end)) {
return false;
}
start++;
end--;
}
return true;
}
}
'코딩 테스트' 카테고리의 다른 글
| [백준] 16566번 : 카드 게임 - JAVA[자바] (0) | 2024.05.30 |
|---|---|
| [백준] 2252번 : 줄 세우기 - JAVA[자바] (1) | 2024.01.05 |
| [백준] 2485번 : 가로수 - JAVA[자바] (1) | 2024.01.02 |
| [백준] 1018번 : 체스판 다시 칠하기 - JAVA[자바] (0) | 2023.12.03 |
| [백준] 10252번 : 그리드 그래프 - JAVA[자바] (0) | 2023.10.10 |