[문제풀이] N진수 게임

업데이트:

2018 Kakao Blind Recruitment 기출 문제

문제 링크 : N진수 게임

풀이 시간 : 40분

1. 문제 풀이

1) 먼저 0부터 어떤 수(num)까지 필요한지 찾는다.

2) 1부터 시작하여 N진법으로 변환하여 붙여준다(temp). 2-1) 미리 구할 숫자의 갯수와 인원 수를 곱하여 그 값보다 temp의 길이가 커지면 종료한다.

3) 시작(p)순서부터 인원 수(m)만큼 건너면서 미리 구할 숫자들을 저장한다.

2. 소스 코드

    static public String solution(int n, int t, int m, int p) {
        String answer = "";
        // N진수로 변환된 숫자들의 최대 길이
        int size = t*m;
        // N진수로 변환된 숫자들
        String temp = "0";
        // 숫자가 어디까지 필요한지 구한다.
        int num =1;
        while(temp.length()<size) {
            // N진수 변환 되었을 때 숫자들을 붙여서 저장
        	temp +=conv(num,n);
        	num++;
        }
        // 처음 p번째 부터 사람 수만큼 건너뛰면서 말해야하는 숫자 저장
        for (int i = p-1; answer.length()!=t; i=i+m) {
			answer +=temp.charAt(i);
		}
        return answer;
    }
	static String conv(int num, int n) {
		String result = "";
		// 나머지 연산을 통해 각 자리 수에 맞는 값 저장
		while(num>0) {
			int remainder = num%n;
			// 10진법 이상일 때, 나머지가 10이상이면 A,B 순으로 저장
			if(10<=remainder) {
				result =  (char) ('A'+(remainder-10))+result;
			}else {
				result =remainder+result;
			}
			num /=n;
		}
		return result;
	}

3. 후기

처음에 예시로 7을 3진법으로 계산해봤는데

21이 맞는데 101로 생각해서

N진법 계산하는 방법이라 달라서 시간을 버렸다.