[Algorithm] - 백준 6679 싱기한 네자리 숫자 - java

일단 쉬운문제다 보니 별생각안하고 무작정 풀었다.

하지만 내가 푼 것 보다 잘 푸신 분들이 있을테니

일단 내가 푼 방식대로 올리고 더 좋은 방법을 구상해봐야겠다.


/*문제
싱기한 네자리 숫자란, [1000,9999]인 10진수 숫자중에서,  다음의 조건을 만족하는 숫자를 말한다.

숫자를 10진수, 12진수, 16진수로 나타낸 다음, 각각의 숫자에 대해, 각 숫자의 자리수를 더했을 때, 세 값이 모두 같아야 한다.
여러분은 싱기한 네자리 숫자를 모두 출력해야 한다.

입력
입력은 주어지지 않는다.

출력
싱기한 네자리 숫자를 오름차순으로 한줄에 하나씩 출력한다.*/

public class fourNumber {
public static void main(String[] args) throws Exception{
for(int i=1000; i<=9999; i++){
int num = i;
String binary1 = Integer.toString(num,10);
String binary2 = Integer.toString(num,12);
String binary3 = Integer.toString(num,16);
if(sum10(binary1) == sum12(binary2)){
if(sum12(binary2) == sum16(binary3)){
System.out.println(num);
}
}
}
}
//10진수 모두 더하기
static int sum10(String num){
String numArr[] = num.split("");
int sum = 0;
for(int i=0; i<numArr.length; i++){
sum += Integer.parseInt(numArr[i]);
}
return sum;
}
//12진수 모두 더하기 - A,B까지 있음
static int sum12(String num){
String numArr[] = num.split("");
int sum = 0;
for(int i=0; i<numArr.length; i++){
int tmp = 0;
if(numArr[i].equalsIgnoreCase("a")){
tmp = 10;
}else if(numArr[i].equalsIgnoreCase("b")){
tmp = 11;
}else{
tmp = Integer.parseInt(numArr[i]);
}
sum += tmp;
}
return sum;
}
//16진수 모두 더하기 - A,B,C,D,E,F까지 있음
static int sum16(String num){
String numArr[] = num.split("");
int sum = 0;
for(int i=0; i<numArr.length; i++){
int tmp = 0;
if(numArr[i].equalsIgnoreCase("a")){
tmp = 10;
}else if(numArr[i].equalsIgnoreCase("b")){
tmp = 11;
}else if(numArr[i].equalsIgnoreCase("c")){
tmp = 12;
}else if(numArr[i].equalsIgnoreCase("d")){
tmp = 13;
}else if(numArr[i].equalsIgnoreCase("e")){
tmp = 14;
}else if(numArr[i].equalsIgnoreCase("f")){
tmp = 15;
}else{
tmp = Integer.parseInt(numArr[i]);
}
sum += tmp;
}
return sum;
}
}

댓글