본문 바로가기
Algorithm/Problem_프로그래머스

프로그래머스([3차] n진수 게임) - Java

by uyoo 2020. 5. 18.

[3차 n진수 게임]

https://programmers.co.kr/learn/courses/30/lessons/17687

 

코딩테스트 연습 - [3차] n진수 게임

N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0�

programmers.co.kr

 

* 로직

  • 0~t*m까지의 숫자를 n진수화 시킨다
  • 진수화된 문자를 첫 글자부터 탐색한다
  • 만약 (i+1)%m == (p%m) 이라면 (즉, p번째 순서가 도달하면) -> 해당 글자를 답에 넣어준다(result)
  • 만약 result의 길이가 t개 이상이 된다면 -> 종료시킨다

 

class Solution {
    public String solution(int n, int t, int m, int p) {
        String answer = "";

        StringBuilder sb = new StringBuilder();
        for(int num=0; num<=t*m; ++num) {

            // 해당 숫자를 n진수로 변경
            StringBuilder tmp = convertNum(num, n);
            sb.append(tmp);
        }

        StringBuilder result = new StringBuilder();
        for(int i=0; i<sb.length(); ++i) {
            if(result.length() >= t) break;

            if(((i+1) % m) == (p%m)) {
                result.append(sb.charAt(i));
            }
        }

        answer = result.toString();
        return answer;
    }
    
    private static StringBuilder convertNum(int num, int n) {
        StringBuilder sb = new StringBuilder();
        if(num == 0) return sb.append(0);

        while (num != 0) {
            int mod = num % n;
            if(mod >= 10) {
                int idx = 'A' + (mod-10);
                sb.append((char) idx);
            }

            else sb.append(mod);
            num /= n;
        }

        // 진수화시켰기 때문에 거꾸로 출력
        return sb.reverse();
    }
}