알고리즘

알고리즘 - 프로그래머스([3차]진수 게임) - 자바

Hyeongjun_Ham 2022. 9. 29. 16:26
class Solution {
    public String solution(int n, int t, int m, int p) {
        String answer = "";
        int wordLength = t * m;
        String[] overTen = {"A", "B", "C", "D", "E", "F"};
        StringBuilder sb = new StringBuilder();
        
        int i = 0;
        while (sb.length() < wordLength) {
            
            if (i <n) {
                if (i >= 10) {
                    String over = overTen[i - 10];
                    sb.append(over);
                }else sb.append(i);
                i++;
                continue;
            }

            StringBuilder str = new StringBuilder();
            int num = i;
            while (num > 0) {
                int add = num % n;
                if (add >= 10) {
                    String over = overTen[add - 10];
                    str.insert(0, over);
                }else str.insert(0, add);
                num = num / n;
            }
            sb.append(str);
            i++;
        }
        
        for (int j = 0; j < sb.length(); j++) {
            if (j % m == p-1) {
                answer += sb.charAt(j);
                if (answer.length()==t) break;
            }
        }
        return answer;
    }
}

내가 푼 것인데 풀고나서 다른사람들 한 것 보니까 대단한 사람이 많은거 같다.

 

일단 n진수 바꾸는 함수가 있다.

 

Integer.toString(int i, int radix)

i : 바꾸고 싶은 수

radix :  n진수 입력

 

아주 편하게 바꿀 수 있다.

 

이거쓰면 while문 대폭 줄어들 수 있다.

 

그래도 n진수 직접 구현한 것

 

String[] overTen = {"A", "B", "C", "D", "E", "F"};
StringBuilder sb = new StringBuilder();

int i = 0;
while (sb.length() <= wordLength) {
    if (i <n) {						//16진수 전용 추가
        if (i >= 10) {
            String over = overTen[i - 10];
            sb.append(over);
        }else sb.append(i);
        i++;
        continue;
    }

    StringBuilder str = new StringBuilder();
    int num = i;
    while (num > 0) {
        int add = num % n;
        if (add >= 10) {
            String over = overTen[add - 10];
            str.insert(0, over);
        }else str.insert(0, add);
        num = num / n;
    }
    sb.append(str);
    i++;
}

배열에 10이상 알파벳만 넣었는데, 차라리 0부터 F까지 다 넣고 했으면 좋았을 것 같다.

 

int num = 10;
String bi = "";
while (num > 0) {
	bi = num % 2 + bi;
    	num = num / 2;
}
//bi = "1010"

아주 간단한 2진수 변환이다.