[devmoon]프로그래머스 - n진수 게임
알고리즘/프로그래머스

[devmoon]프로그래머스 - n진수 게임

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

 

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

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

programmers.co.kr

1. 유형

재귀, 구현

 

2. 시뮬레이션

  • 0부터 수를 1씩 증가
  • 수를 n진법으로 전환
  • 튜브의 순서에 맞는 변환된 n진법수를 선택
  • 위를 튜브가 t개 선택할 때까지, 반복

3. 코드

 

- 이진법 전환 코드

- 탐색코드

class Solution {
    public String solution(int n, int t, int m, int p) {
        String answer = "";
        int index = 0;
        int turn=1;
        out:while(true){
            String binary = getBinary(index, n);
            for(int i=0; i<binary.length(); i++){
                if(turn == p){
                    answer+=binary.charAt(i);
                    p+=m;
                }
                if(answer.length() == t)
                    break out;
                turn++;
            }
            index++;
        }
        return answer;
    }
    static String getBinary(int index, int n){
        int mock = index/n;
        String na = index%n >= 10 ? getNa(index%n) : String.valueOf(index%n);
        if(mock == 0){
            return na;
        }
        return getBinary(mock, n)+na;
    }
    static String getNa(int na){
        switch(na){
            case 10:
                return "A";
            case 11:
                return "B";
            case 12:
                return "C";
            case 13:
                return "D";
            case 14:
                return "E";
            case 15:
                return "F";
            case 16:
                return "G";
            default:
                return "";
        }
    }
}

4. 느낀점

n진법에 대해서 확실히 알았으며,

전역변수 없이 재귀의 리턴값만을 활용하는 법을 터득