본문 바로가기

코딩 테스트/Project Euler @ kr

36) 10진법과 2진법으로 모두 대칭수인 1,000,000 이하 숫자의 합

반응형

http://euler.synap.co.kr/prob_detail.php?id=36


Skillist 설명---------------------------------------------------------------------------------


public static void main(String[] args){

int total = 0;

for(int i=1;i<1000000;i++){

int same=0;

String now = String.valueOf(i);

for(int j=0;j<now.length()/2;j++){ //숫자 대칭 검사

if(now.charAt(j)!=now.charAt(now.length()-1-j)){

same +=1;

break;

}

}

if(same==0){ //10진법이 대칭이면

int su = i, nowtwo = 1;

String two = "";

while(nowtwo<=i){ //i보다 큰 2의 n승 구하기

nowtwo*=2;

}

nowtwo/=2;

while(nowtwo != 0){ //2진법으로 바꾸기

if(su>=nowtwo){ //2의 n승보다 크면 1 추가;

su-=nowtwo;

two+="1";

}else{ //2의 n승보다 작으면 0 추가;

two+="0";

}

nowtwo/=2;

}

for(int j=0;j<two.length()/2;j++){ //숫자 대칭 검사

if(two.charAt(j)!=two.charAt(two.length()-1-j)){

same +=1;

break;

}

}

if(same==0){ //2진법이 대칭이면

total+=i;

}

}

}

System.out.println(total);

}


다시 공부----------------------------------


public static void main(String arg[]){

int sum = 0;

for(int i=1;i<=1000000;i++){

String temp = String.valueOf(i);

int result = 0;

for(int j=0;j<(temp.length()/2);j++){ //10진수 대칭확인 

if(temp.charAt(j)!=temp.charAt(temp.length()-1-j)){ //대칭 아니면 result=1;

result=1;

break;

}

}

if(result==0){ //10진수가 대칭이면

StringBuffer bin = new StringBuffer();

int tempBin = i;

while(tempBin>0){ //2진수 만들기

bin.append(tempBin%2);

tempBin/=2;

}

if(bin.charAt(bin.length()-1)!='0'){

for(int g=0;g<bin.length();g++){ //2진수 대칭 확인

if(bin.charAt(g)!=bin.charAt(bin.length()-1-g)){ //2진수 대칭 아니면 result=1;

result+=1;

break;

}

}

if(result==0){ //2진수도 대칭이면

sum+=i;

}

}

}

}

System.out.println(sum);

}

반응형