https://school.programmers.co.kr/learn/courses/30/lessons/17687
십진수를 2진수로 변환하는 함수부터 작성하였다.
그리고 16진법까지 처리하도록 함수를 구현하였다.(10~15 는 A,B,C,D,E,F 로 처리하는)
십진수를 2진수로 변환하는게 생각이 또 안나서 손으로 그려봄
4 는 100
9는 1001
그 다음에는 비교적 수월하였다.
근데 튜브가 말해야 할 숫자 1000 개를 미리 구하는 경우에 이진수 숫자를 몇개까지 구하여야 할까 이런 부분이 어려웠다 그냥 대충 1000X인원수 이렇게 해버렸다;;;
시간복잡도는 첫번째 반복문에서
O(t m logN(t * m)) 으로 볼 수 있다.
1000 * 100 * log2(1000*100)
100000 * 16
1600000
import java.util.*;
class Solution {
public String solution(int n, int t, int m, int p) {
//String answer = "";
StringBuilder sb = new StringBuilder();
for(int i = 0; i < t*m; i++)
sb.append(trans(i, n));
StringBuilder answer = new StringBuilder();
for(int i = p-1; i < t*m; i+=m)
answer.append(sb.charAt(i));
return answer.toString();
}
public String trans(int input, int n)//10진수숫자, 진법종류
{
ArrayList<Integer> arr = new ArrayList<>();
while(input >= n)
{
arr.add(input%n);
input /= n;
}
arr.add(input);
Collections.reverse(arr);
StringBuilder sb = new StringBuilder();
for(int i : arr)
{
if(i >= 10)
{
i += 'A'-10;
Character c = (char)(i);
sb.append(c.toString());
}
else
sb.append(Integer.toString(i));
}
//System.out.println(sb);
return sb.toString();
}
}