본문 바로가기

알고리즘 풀이/프로그래머스

[프로그래머스] n진수 게임 / 2018 KAKAO BLIND RECRUITMENT(3차) - JAVA

🔗 문제 링크

[프로그래머스] n진수 게임 / 2018 KAKAO BLIND RECRUITMENT(3차)

 

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

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

programmers.co.kr

 

📝 풀이 과정

n진수로 이루어진 숫자를 차례대로 붙인 문자열을 구한 뒤 튜브가 말할 순서마다 뽑아서 붙이는 방식을 사용하였다.

 

구할 개수 t개에 인원은 총 m명이므로 구해야 할 숫자는 t * m보다 작다는 것을 알 수 있기 때문에 1부터 t*m까지의 숫자를 n진수로 변환한 뒤 문자열에 붙이기위해 String.toString(int n, int radix) 메소드를 사용했다. 숫자 n을 radix진수 형태의 문자열로 바꾸어주기때문에 쉽게 변환할 수 있다.

 

이후 반복문을 사용해 튜브는 p번째 순서로 t번 숫자를 말해야하기 때문에 p - 1부터 인덱스 m(사람 수)만큼 늘려 말할 숫자들을 문자열에 붙이고, t개 이상이 될 때까지 반복해주었다. String.toString은 소문자로 반환해주기때문에 마지막에 toUpperCase() 메소드를 사용해 대문자로 변환한 값을 반환해주었다.

 

💻 코드

class Solution {
    public String solution(int n, int t, int m, int p) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i <= t * m; i++) 
            sb.append(Integer.toString(i, n));

        StringBuilder ans = new StringBuilder();
        for (int i = p - 1; ans.length() < t; i += m) 
            ans.append(sb.charAt(i));

        return ans.toString().toUpperCase();
    }
}