728x90
코드 힌트
- 10진수를 n진수로 변환하기
- 주어진 숫자를 원하는 진수로 변환하려면, 나머지 연산을 반복하여 숫자를 변환해야 합니다.
- 예를 들어, 16진수로 변환할 때 10 이상은 'A', 'B' 등으로 표시됩니다. 숫자를 변환한 후 결과는 역순으로 정리합니다.
- 이 과정을 통해 0부터 순차적으로 모든 숫자를 n진수로 변환하게 됩니다.
- 순번에 맞는 숫자 선택하기
- 각 숫자를 변환한 후, 변환된 진법 숫자를 순서대로 확인하면서 자기 차례에 해당하는 숫자만 선택합니다.
- n진수로 변환된 숫자에서 각 자릿수는 차례대로 참가자에게 할당됩니다. 자신의 순번에 맞는 숫자를 찾아서 결과에 추가합니다.
- 순번 관리
- 플레이어의 차례는 순환적으로 돌아가므로, 순번을 % 연산으로 관리합니다.
- 예를 들어, 참가자가 4명이라면 0, 1, 2, 3으로 순서가 반복되며, 자신이 원하는 순번에 해당할 때만 숫자를 추가합니다.
정답은 더보기 클릭
더보기
class Solution {
public String solution(int n, int t, int m, int p) {
StringBuilder result = new StringBuilder(); // 결과를 저장할 StringBuilder
int currentNumber = 0; // 변환할 숫자 초기값
int currentTurn = 0; // 현재 순번을 추적하기 위한 변수
while (result.length() < t) { // t개의 숫자를 얻을 때까지 반복
String convertedNumber = convertedNumberToBase(currentNumber, n); // 숫자를 n진수로 변환
for (char c : convertedNumber.toCharArray()) { // 변환된 숫자의 각 자리 확인
if (currentTurn == p - 1) { // 현재 순번이 자신의 순번과 일치할 때
result.append(c); // 해당 숫자를 결과에 추가
}
if (result.length() == t) { // 필요한 숫자를 다 모으면 결과 반환
return result.toString();
}
currentTurn = (currentTurn + 1) % m; // 순번을 다음 참가자로 변경
}
currentNumber++; // 다음 숫자로 이동
}
return result.toString(); // 최종 결과 반환
}
static String convertedNumberToBase(int number, int base) {
StringBuilder result = new StringBuilder(); // 변환 결과를 저장할 StringBuilder
String[] alpha = {"A","B","C","D","E","F"}; // 10진수 이상의 숫자를 위한 배열
if (number == 0) {
return "0"; // 숫자가 0이면 "0" 반환
}
while (number > 0) { // 숫자를 n진수로 변환
int remainder = number % base; // 현재 숫자의 나머지를 구함
if (remainder >= 10) { // 나머지가 10 이상이면 알파벳으로 변환
result.append(alpha[remainder - 10]);
} else {
result.append(remainder); // 그렇지 않으면 숫자를 추가
}
number = number / base; // 숫자를 base로 나누어 다음 자리로 이동
}
return result.reverse().toString(); // 결과를 역순으로 반환
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] k진수에서 소수 개수 구하기 (0) | 2024.08.16 |
---|---|
[프로그래머스] 다리를 지나는 트럭 (0) | 2024.08.15 |
[프로그래머스] [1차] 뉴스 클러스터링 (0) | 2024.08.15 |
[프로그래머스] 피로도 (0) | 2024.08.14 |
[프로그래머스] 튜플 (0) | 2024.08.14 |