코테/lvl2

프로그래머스 [3차] n진수 게임(lvl2) 풀어보기

디비드킴 2026. 10. 8. 16:48

문제링크

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제 핵심

  1. 숫자를 0부터 시작해서 차례대로 말한다. 첫 번째 사람은 0, 두 번째 사람은 1, … 열 번째 사람은 9를 말한다.
  2. 10 이상의 숫자부터는 한 자리씩 끊어서 말한다. 즉 열한 번째 사람은 10의 첫 자리인 1, 열두 번째 사람은 둘째 자리인 0을 말한다.
  3. 튜브가 말해야 하는 숫자 t개를 공백 없이 차례대로 나타낸 문자열. 단, 10~15는 각각 대문자 A~F로 출력한다.
  4. 입력 형식
    • 2 ≦ n ≦ 16
    • 0 < t ≦ 1000
    • 2 ≦ m ≦ 100
    • 1 ≦ p ≦ m
  5. 진법 n, 미리 구할 숫자의 갯수 t, 게임에 참가하는 인원 m, 튜브의 순서 p 가 주어진다.

알고리즘

1.이번차례수 해당진법으로 변환

2.문자열에 합치기

3.자기차례인지 확인하기

4.맞다면 문자열에서 해당 index숫자만 가져와서 정답문자열에 합치기

5.다음숫자/번호 올리기

6.t만큼 정답문자열길이가 될때까지 반복하기


코드


 public static  String solution(int n, int t, int m, int p) {
        String answer = "";
        int startn=0;
        int selectCount=0;
        String nums="";
        int index=0;
        int stopIndex=p-1;
        while (selectCount<t) {
            String num = Integer.toString(startn, n);
            nums+=num;
            System.out.println(nums);
            if(index==stopIndex){
                System.out.println("내차례");
                answer+=nums.charAt(index);
                selectCount+=1;
                stopIndex+=m;
            }
            startn+=1;
            index+=1;
        }

        System.out.println(answer);
        return answer.toUpperCase();
    }

 


결과


gpt피드백

1. 알고리즘 평가

네 알고리즘은 진법 변환과 참가자 순서를 이용해서 정답을 구하는 방식이야.

잘한 점

  • Integer.toString(startn, n)으로 진법 변환을 간단히 해결함.
  • stopIndex = p - 1로 0부터 시작하는 인덱스에 맞춤.
  • stopIndex += m으로 튜브의 다음 차례를 계산함.
  • selectCount < t로 필요한 글자 수만큼 반복함.
  • DFS나 재귀 없이 반복문으로 해결함.

개선점 ① 숫자 인덱스와 문자 인덱스 분리

개선점 ② 필요한 길이만큼 생성하고 추출

2. 코드 평가

개선점 ① StringBuilder 사용

String은 불변 객체이기 때문에 +=를 반복하면 새로운 문자열이 계속 만들어져.

 
 
 

후기

아 문제 길고 변수많아서 문제 파악하기 귀찮은 문제였다