프로그래머스 n진수 게임 - 2018 카카오 블라인드 채용

문제

0부터 숫자를 차례대로 셀 때 이를 n진법으로 변환하여 자신의 순서에 다라 숫자를 부르면 되는 게임이다.

0, 1, 2, 3, 4, 5, 6, 7, 8 을 2진법으로 변환하면 0, 1, 10, 11, 100, 101, 110, 111 이다. 이 때 사람이 두 명이고 순서가 첫 번째라면 0, 1, 1, 1 …. 변환한 숫자를 이어붙인 문자열에서 첫번쨰, 세번째, 다섯번째, 일곱번째의 번호를 부르면 된다.

카카오 공식해설

접근

풀이

1번

public String solution(int n, int t, int m, int p) {
    StringBuilder sb = new StringBuilder();
    sb.append(0);
    int num = 1;

    while(sb.length() < t*m) {
        sb.append(convert(num, n));
        num++;
    }

    StringBuilder ans = new StringBuilder();

    for(int i=0 ; i<t*m ; i++)
        if(i % m == (p-1)) 
            ans.append(sb.charAt(i));

    return ans.toString();
}

public StringBuilder convert(int num, int n) {
    StringBuilder sb = new StringBuilder();
    
    while(num>0) {
        int val = num % n;
        sb.append(val >= 10 ? String.valueOf((char)('A' + val - 10)) : val);
        num /= n;
    }
    return sb.reverse();
}

n진수 게임 문제는 최소로 구해야하는 문자열의 길이와 숫자를 n진법으로 변환하는 것을 물어보는 문제 같다. val >= 10 ? String.valueOf((char)(‘A’ + val - 10)) : val); 이 코드를 기억하고 있으면 다양한 곳에 활용이 가능할 것 같다.

결론



Related Posts