n진수 게임_복습

하이솝·2026년 8월 15일

2026.08.15

문제 풀이

나의 코드


소요 시간: 16분
시간 복잡도: O(tm)O(t·m)


class Solution {
    public String solution(int n, int t, int m, int p) {
        StringBuilder sb = new StringBuilder();
        
        int idx = 0;
        int order = 1;
        while(sb.length() < t) {
            String number = Integer.toString(idx, n);
            number = number.toUpperCase();
            for (int i = 0; i < number.length(); i++) {
                if (order == p) {
                    sb.append(number.charAt(i));
                    if (sb.length() == t) {
                        break;
                    }
                }
                order = order % m + 1;
            }
            idx++;
        }
        
        return sb.toString();
    }
}

AI 코드


시간 복잡도: O(tm)O(t·m)


코드 분석

필요한 n진수 전부를 미리 tube에 저장해두고,
튜브의 순서에 필요한 수만 따로 빼서 저장


class Solution {
    public String solution(int n, int t, int m, int p) {
        // 1) 필요한 만큼만 튜브 생성: 마지막으로 읽을 위치는 (t-1)*m + p ≤ t*m
        StringBuilder tube = new StringBuilder();
        for (int i = 0; tube.length() < t * m; i++) {
            tube.append(Integer.toString(i, n).toUpperCase());
        }

        // 2) p번째(1-based)부터 m칸씩 t개 뽑기
        StringBuilder answer = new StringBuilder();
        for (int i = p - 1; answer.length() < t; i += m) {
            answer.append(tube.charAt(i));
        }
        return answer.toString();
    }
}

문제 풀이 후기

수학적인 계산이 코드 길이에 얼마나 큰 영향을 주는지 알 수 있었다.
필요한 n진수를 미리 계산하는 과정을 통해서,
각 숫자마다 String을 2개씩 할당하는 과정을 없앴다.

0개의 댓글