[프로그래머스] [3차] n진수 게임

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17687

접근 방식

3, 6, 9 게임과 게임 방식은 똑같다. 정해진 순서에 맞춰 내가 말해야 할 숫자를 말해야 한다.

큰 차이점이라면, 내가 말해야 하는 숫자는 n진수로 변환된 숫자(or문자)여야 한다는 것이다.

잘못된 접근

숫자는 숫자대로 관리하고, 현재 진행되고 있는 문자를 따로 관리해서 정답을 구하려 했다.

하지만, 너무 로직이 너무 복잡해서 갈피를 찾기 어려워서 힌트를 좀 받았다.

잘 된 접근

먼저 주어진 숫자만큼을 모두 n진수로 변환해서 문자열로 가지고 있고, 내 순서에 맞는 문자만 고르면 쉽게 해결된다.

결과

소스 코드

class Solution {
    public String solution(int n, int t, int m, int p) {
        StringBuilder answer = new StringBuilder();
        StringBuilder tmp = new StringBuilder();
        int idx = 0;
        // 구할 수 있는 최대 수까지 먼저 구하기
        while(tmp.length() < t*m){
            tmp.append(Integer.toString(idx++, n));
        }
        // 구한 수에서 내 차례의 숫자(문자)만 골라서 answer에 더하기
        for(int i=0; i<t; i++){
            answer.append(tmp.charAt(i*m + p - 1));
        }
        return answer.toString().toUpperCase(); // 대문자로 변환
    }
}

첫번째 while문에서, 최대 숫자인 t*m까지 문자열을 구한다. 이 과정에서 모든 숫자를 n진수로 변환한다.

이후에, 변환된 문자열에서 내 순서에 맞는 문자만 골라서 answer에 더한다.

최종 결과값은, 대문자만 변환해야 하므로, 대문자로 변환 후 리턴한다.

느낀 점

말해야 할 문자와 현재 숫자를 따로 관리하려다 보니, 로직이 꼬이고 코드가 복잡해졌었다.

문제에서 말하고자 하는 바가 무엇인지를 파악하고, 어떻게 코드를 간단하게 작성할 지 아는 것이 중요한 문제였다.