[3차] n진수 게임 : https://programmers.co.kr/learn/courses/30/lessons/17687#
n진수로 변경하는 법을 알면 쉽게 풀수 있다. 하지만 문제를 잘못 이해해서 0~1000까지의 숫자를 n진수로 변경해서 런타임이 발생하는걸 못잡아서 시간이 걸렸다.
문제 풀이는 아래와 같다.
class Solution {
public String solution(int n, int t, int m, int p) {
String numbers;
StringBuilder numbersBuilder = new StringBuilder();
numbersBuilder.append("0");
int num=1;
//n진수로 변경한 문자열의 길이가 t*m이 될때까지만 변환.
while(numbersBuilder.toString().length()<=t*m){
numbersBuilder.append(conversion(num++,n));
}
numbers = numbersBuilder.toString();
StringBuilder answer = new StringBuilder();
//말해야하는 숫자 저장
for(int i=0;i<t;i++){
answer.append(numbers.charAt(p-1));
p += m;
}
return answer.toString();
}
//n진수 전환
String conversion(int num, int N){
StringBuilder sb = new StringBuilder();
int current = num;
//현재 숫자가 0보다 작을때까지 반복
while(current > 0){
//현재 숫자를 N으로 나누었을때 10보다 작다면 나머지의 값을 그대로 저장
if(current%N < 10){
sb.append(current%N);
// 10이상으로 넘어갔을 경우 'A'로 표현해야하기 때문에
// 나머지값에서 10을 빼고 아스키코드를 이용해 'A'부터 'F'까지의 값을 구할수 있다.
}else{
sb.append((char)(current%N-10+'A'));
}
current/=N;
}
sb.reverse();
return sb.toString();
}
}