https://school.programmers.co.kr/learn/courses/30/lessons/17687
사용할 진수 = n
구해야 하는 숫자의 개수 = t
참가하는 인원 = m
플레이어의 순서 = p
n진수를 이용하여 0부터 숫자를 말하기.
10 이상의 숫자는 1, 0 이렇게 나눠서 말하기.
10~15는 A~F로 출력하기.
0부터 전체 플레이어의 수(m)*미리 구해야 하는 수(t)를 for문을 이용하여 반복
10~15는 A~F로 출력해야하기 때문에 조건을 걸어두고 이렇게 나누면서 구하면 뒤집히기 때문에 마지막에 .reverse()를 이용하여 다시 뒤집어서 답을 구해갔다.
int value = i;
StringBuilder sb = new StringBuilder();
do {
if (value % n > 9) {
if (value % n == 10) sb.append("A");
else if (value % n == 11) sb.append("B");
else if (value % n == 12) sb.append("C");
else if (value % n == 13) sb.append("D");
else if (value % n == 14) sb.append("E");
else if (value % n == 15) sb.append("F");
} else {
sb.append(value % n);
}
value /= n;
} while (value != 0);
return sb.reverse().toString();
이후 미리 구해야 하는 숫자의 갯수가 될 때까지 인덱스를 증가해 가며, 플레이어의 순서가 되었을 때 StringBuilder에 추가해 주었다.
while (ansSB.length() != t) {
if (index % m + 1 == p) {
ansSB.append(sb.charAt(index));
}
index++;
}
아래는 전체 코드이다.
class Solution {
public String solution(int n, int t, int m, int p) {
String answer = "";
StringBuilder sb = new StringBuilder();
StringBuilder ansSB = new StringBuilder();
for (int i = 0; i < t*m; i++) {
sb.append(diversion(i, n));
}
int index = 0;
while (ansSB.length() != t) {
if (index % m + 1 == p) {
ansSB.append(sb.charAt(index));
}
index++;
}
answer = ansSB.toString();
return answer;
}
public String diversion(int i, int n) {
int value = i;
StringBuilder sb = new StringBuilder();
do {
if (value % n > 9) {
if (value % n == 10) sb.append("A");
else if (value % n == 11) sb.append("B");
else if (value % n == 12) sb.append("C");
else if (value % n == 13) sb.append("D");
else if (value % n == 14) sb.append("E");
else if (value % n == 15) sb.append("F");
} else {
sb.append(value % n);
}
value /= n;
} while (value != 0);
return sb.reverse().toString();
}
}
그런데 Integer.toString(숫자, 진수)를 쓰면 자동으로 해당 진수로된 값으로 바꾸어 준다.
class Solution {
public String solution(int n, int t, int m, int p) {
StringBuilder sb = new StringBuilder();
StringBuilder ansSB = new StringBuilder();
for (int i = 0; i < t * m; i++) {
sb.append(Integer.toString(i, n));
}
int index = 0;
while (ansSB.length() != t) {
if (index % m + 1 == p) {
ansSB.append(sb.charAt(index));
}
index++;
}
return ansSB.toString().toUpperCase();
}
}
때문에 진수로 변환하는 부분을 이렇게 Integer.toString()을 써서 변환해 주고 정답을 return 할 때 toUpperCase()로 영문자들을 대문자로 바꾸어주면 정답이 나올 것이다.
'Programmers' 카테고리의 다른 글
[프로그래머스][JAVA]Lv. 2 - 의상 (0) | 2023.05.02 |
---|---|
[프로그래머스][JAVA]Lv. 2 - 전화번호 목록 (0) | 2023.05.02 |
[프로그래머스][JAVA]Lv. 2 - 파일명 정렬 (0) | 2023.04.21 |
[프로그래머스][JAVA]Lv. 1 - 달리기 경주 (0) | 2023.04.13 |
[프로그래머스][JAVA]Lv. 2 - 압축 (0) | 2023.04.11 |