[백준] 14561번: 회문

CodingJoker·2025년 7월 21일

백준

목록 보기
65/83

문제

백준 - 14561번: 회문

분석

어떤 십진수의 수 A가 주어졌을 때, 이를 n진수로 표현하면 회문인지 아닌지 판별하는 문제이다.

십진수 A의 범위가 100,000,000,000이므로 long 자료형을 사용해야한다.
자바에서 toString()메소드에 base 옵션을 넣어 사용하면 10진수를 base에 맞게 해당 진수로 변환시켜준다. 그 값을 뒤집어서 같은지 판별하면 된다.
뒤집는 것은 StringBuilder의 revserse() 메소드를 사용하면 쉽게 구한다.
주의할 점은 StringBuilder를 String으로 바꾸지 않고 비교하면 값비교가 아니기 때문에 항상 true가 나온다.

T x A의 문자열 길이가 시간 복잡도이다.

코드

해결언어 : Java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static StringBuilder sb = new StringBuilder();
	static int T, n;
	static long a;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		T = Integer.parseInt(br.readLine());
		for (int i = 0; i < T; i++) {
			st = new StringTokenizer(br.readLine());
			a = Long.parseLong(st.nextToken());
			n = Integer.parseInt(st.nextToken());
			StringBuilder res = new StringBuilder(Long.toString(a, n));
			sb.append(isPalindrome(res) ? 1 : 0).append("\n");
		}
		System.out.println(sb);
		br.close();
	}

	static boolean isPalindrome(StringBuilder str) {
		StringBuilder rvs = new StringBuilder(str).reverse();
		return str.toString().equals(rvs.toString());
	}
}

profile
어제보다 지식 1g 쌓기

0개의 댓글