알고리즘
알고리즘 - 프로그래머스([3차]진수 게임) - 자바
Hyeongjun_Ham
2022. 9. 29. 16:26
class Solution {
public String solution(int n, int t, int m, int p) {
String answer = "";
int wordLength = t * m;
String[] overTen = {"A", "B", "C", "D", "E", "F"};
StringBuilder sb = new StringBuilder();
int i = 0;
while (sb.length() < wordLength) {
if (i <n) {
if (i >= 10) {
String over = overTen[i - 10];
sb.append(over);
}else sb.append(i);
i++;
continue;
}
StringBuilder str = new StringBuilder();
int num = i;
while (num > 0) {
int add = num % n;
if (add >= 10) {
String over = overTen[add - 10];
str.insert(0, over);
}else str.insert(0, add);
num = num / n;
}
sb.append(str);
i++;
}
for (int j = 0; j < sb.length(); j++) {
if (j % m == p-1) {
answer += sb.charAt(j);
if (answer.length()==t) break;
}
}
return answer;
}
}
내가 푼 것인데 풀고나서 다른사람들 한 것 보니까 대단한 사람이 많은거 같다.
일단 n진수 바꾸는 함수가 있다.
Integer.toString(int i, int radix)
i : 바꾸고 싶은 수
radix : n진수 입력
아주 편하게 바꿀 수 있다.
이거쓰면 while문 대폭 줄어들 수 있다.
그래도 n진수 직접 구현한 것
String[] overTen = {"A", "B", "C", "D", "E", "F"};
StringBuilder sb = new StringBuilder();
int i = 0;
while (sb.length() <= wordLength) {
if (i <n) { //16진수 전용 추가
if (i >= 10) {
String over = overTen[i - 10];
sb.append(over);
}else sb.append(i);
i++;
continue;
}
StringBuilder str = new StringBuilder();
int num = i;
while (num > 0) {
int add = num % n;
if (add >= 10) {
String over = overTen[add - 10];
str.insert(0, over);
}else str.insert(0, add);
num = num / n;
}
sb.append(str);
i++;
}
배열에 10이상 알파벳만 넣었는데, 차라리 0부터 F까지 다 넣고 했으면 좋았을 것 같다.
int num = 10;
String bi = "";
while (num > 0) {
bi = num % 2 + bi;
num = num / 2;
}
//bi = "1010"
아주 간단한 2진수 변환이다.