11~16진법의 경우 두자수를 A,B,C,D,E,F를 사용해서 표현해야한다.
changeNum() 메소드를 통해
들어온 숫자에 대해서 해당 진법으로 표현한수를 return한다.
나머지 처리가 가장 낮은자리 순서부터 되기 때문에 이를 stack에 담았다가 꺼내면 가장 높은 자리수부터 나온다.
import java.util.*;
class Solution {
public String solution(int n, int t, int m, int p) {
String answer = "";
//숫자는 0부터 시작
int cnt =0;
String str = "";
//str의 길이는 t*m
while(str.length()<t*m){
String temp = changeNum(cnt, n);
str+=temp;
cnt++;
}
//System.out.println(str);
int idx = p-1;
while(true){
answer+=str.substring(idx,idx+1);
idx +=m;
if(answer.length()==t){
break;
}
}
return answer;
}
public String changeNum(int cnt, int n){
String dictionary = "ABCDEF";
if(cnt==0){
return "0";
}
Stack<String> st = new Stack();
while(cnt>0){
int res =cnt%n;
if(n>=10 && 10<=res && res<n){
st.push(dictionary.substring(res-10, res-10+1));
}else{
st.push(String.valueOf(res));
}
cnt = cnt/n;
}
String result = "";
while(!st.isEmpty()){
result+=st.pop();
}
return result;
}
}