입력값으로 들어오는 변수가 4개나 되어서 문제를 잘 읽어야 했다.
t값이 잘 이해가 안되었는데 정리하면 튜브가 몇번을 말해야 하는지? 가 t값이다.
입력값의 크기가 그리 크지 않아서 시간초과가 날 일은 없다고 생각해서 편하게 풀었다.
로직은 십진법의 번호를 n진수로 변환하여 배열로 만든다.
그리고 배열의 크기만큼 순환하며 순서에 맞는 번호를 StringBuilder에 추가한다.
만약 배열 순환중 StringBuilder의 크기가 t와 같아지면 탐색을 즉시 중단한다.
마지막으로 만들어진 StringBuilder를 String으로 변환후 대문자로 만들어준다.
최종 코드
class Solution {
public String solution(int n, int t, int m, int p) {
String answer = "";
StringBuilder sb = new StringBuilder();
// 십진법 번호
int num = 0;
// 말해야 하는 순서
int order = 1;
// 탐색 시작
while (sb.length() < t) {
// 번호를 n진수로 변환후 배열로 만들기
String[] temp = Integer.toString(num++, n).split("");
// 배열을 돌면서 순서에 맞게 StringBuilder에 추가
for (int i = 0; i < temp.length; i++) {
// 순서가 맴버수보다 커지면 1번으로 초기화
if(order > m) {
order = 1;
}
// 순서에 맞는 번호라면 StringBuilder에 추가
if(order == p) {
sb.append(temp[i]);
}
// StringBuilder의 크기가 t와 같다면 즉시 탐색종료
if(sb.length() == t) {
break;
}
// 순서 증가
order++;
}
}
// StringBuilder를 String으로 변환후 대문자 변환
answer = sb.toString().toUpperCase();
return answer;
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 - 쿼드 압축 후 개수 세기 (0) | 2022.09.23 |
---|---|
(Java) 프로그래머스 - 방문 길이 (1) | 2022.09.21 |
(Java) 프로그래머스 - 압축 (0) | 2022.09.17 |
(Java) 프로그래머스 - n^2 배열 자르기 (0) | 2022.09.15 |
(Java) 프로그래머스 - 점프와 순간 이동 (0) | 2022.09.11 |