🌞Algorithm/🔥Baekjoon

[Baekjoon] 11068_회문인 수

뿌야._. 2024. 8. 26. 20:59
문제(출처: https://www.acmicpc.net/problem/11068)

< 회문인 수 >

 

문제 풀이 

 

2진법 ~ 64진법으로 변환 후 회문인지 판단한다.

 

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;

public class _11068_ { // 회문인 수

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int T = Integer.parseInt(bf.readLine());

		for (int i = 0; i < T; i++) {
			String str = bf.readLine();

			boolean flag = false;
			for (int j = 0; j <= str.length() / 2; j++) {
				if (str.charAt(j) != str.charAt(str.length() - 1 - j)) {
					flag = true;
					break;
				}
			}
			if (!flag) {
				bw.write("1\n");
			} else {
				for (int j = 2; j <= 64; j++) {
					if (j == 10) {
						continue;
					}
					flag = false;

					int num = Integer.parseInt(str);
					ArrayList<Integer> list = new ArrayList<>();
					while (num != 0) {
						list.add(num % j);
						num /= j;
					}

					for (int k = 0; k <= list.size() / 2; k++) {
						if (list.get(k) != list.get(list.size() - 1 - k)) {
							flag = true;
							break;
						}
					}
					if (!flag) {
						bw.write("1\n");
						break;
					}
				}
				if (flag) {
					bw.write("0\n");
				}
			}
		}
		bw.flush();
	}
}

 

변수)
T : 테스트 케이스 수
str : 테스트 데이터
flag : 회문 여부
num : 테스트 데이터 string -> int
list : B진법으로 변환한 값

 

테스트 케이스 수를 입력받는다. 테스트 케이스 수만큼 테스트 데이터를 입력받는다.

먼저 입력받은 테스트 데이터가 회문인지 판단한다. 회문이라면 1을 출력하고 회문이 아니라면 2진법부터 64진법으로 변환한다. B진법으로 변환하여 ArrayList에 저장한다. ArrayList를 판단하며 회문인지 판단하여 회문이라면 1을 출력하고 아니라면 0을 출력한다.