문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/17687
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 핵심
- 숫자를 0부터 시작해서 차례대로 말한다. 첫 번째 사람은 0, 두 번째 사람은 1, … 열 번째 사람은 9를 말한다.
- 10 이상의 숫자부터는 한 자리씩 끊어서 말한다. 즉 열한 번째 사람은 10의 첫 자리인 1, 열두 번째 사람은 둘째 자리인 0을 말한다.
- 튜브가 말해야 하는 숫자 t개를 공백 없이 차례대로 나타낸 문자열. 단, 10~15는 각각 대문자 A~F로 출력한다.
- 입력 형식
- 2 ≦ n ≦ 16
- 0 < t ≦ 1000
- 2 ≦ m ≦ 100
- 1 ≦ p ≦ m
- 진법 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은 불변 객체이기 때문에 +=를 반복하면 새로운 문자열이 계속 만들어져.
후기
아 문제 길고 변수많아서 문제 파악하기 귀찮은 문제였다
'코테 > lvl2' 카테고리의 다른 글
| 프로그래머스 쿼드압축 후 개수 세기(lvl2) 풀어보기 (0) | 2026.10.08 |
|---|---|
| 프로그래머스 2 x n 타일링(lvl2) 풀어보기 (0) | 2026.09.28 |
| 프로그래머스 땅따먹기(lv2) 풀어보기 (0) | 2026.09.28 |
| 프로그래머스 멀리 뛰기(lvl2) 풀어보기 (0) | 2026.09.26 |
| 프로그래머스 N개의 최소공배수(lvl2) 풀어보기 (0) | 2026.09.26 |