백준 11068번: 회문인 수 [브루트포스][완전탐색][구현] - Java :: 매운코딩
728x90
300x250

 

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

 

11068번: 회문인 수

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

www.acmicpc.net

백준 11068번 회문인 수

왼쪽,오른쪽 어떻게 읽어도 동일한 수를 회문인 수라고 한다. 토마토,기러기,스위스 같은 애들..

 

핵심은 2~64진법을 굳이 그 진법에 해당하는 수로 바꿔줄 필요가 없다는 것

같은 나머지값을 가지고있으면 10진법이나 B진법으로 값이 같기때문에 변환안해도 된다.

 

 

728x90

 

<Java 정답 코드>

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

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		//System.setIn(new FileInputStream("Test.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int TC = Integer.parseInt(st.nextToken());
		
		for (int t = 0; t < TC; t++) {
			int res = 0;
			st = new StringTokenizer(br.readLine());
			int N = Integer.parseInt(st.nextToken());
			
			//회문여부 찾기
			for (int B = 2; B <= 64; B++) {
				//종료: 회문인 수 찾았는가?
				if(res==1)
					break;
				
				int mok = N;
				int len =0;
				int[] resArr = new int[20];
				//1. 진법 변환
				while(true) {
					if(mok==0)
						break;
					
					resArr[len++] = mok%B;
					mok = mok / B;
				}
				

				//2. 회문여부 확인
				for (int i = 0; i <= (len/2); i++) {
					if(resArr[i]==resArr[len-1-i]) {
						if(i==len/2)
							res = 1;
					} else {
						break;
					}
					
				}
			}
			
			System.out.println(res);
			
		}
	}

}
728x90

+ Recent posts