코딩응급실
프로그래머스: [3차] n진수 게임 본문
import java.util.*;
public class Solution {
public static String solution(int n, int t, int m, int p) {
StringBuilder totalNumbers = new StringBuilder();
StringBuilder result = new StringBuilder();
// 최대로 필요한 길이를 계산합니다. 튜브가 말해야 하는 숫자의 개수 * 참가자 수
int maxLen = t * m;
int num = 0;
// 최대 필요 길이까지 숫자를 변환하여 문자열로 추가합니다.
while (totalNumbers.length() < maxLen) {
totalNumbers.append(Integer.toString(num, n).toUpperCase());
num++;
}
// 튜브의 순서에 맞는 숫자들만 결과 문자열에 추가합니다.
for (int i = 0; i < t; i++) {
int index = (p - 1) + i * m;
result.append(totalNumbers.charAt(index));
}
return result.toString();
}
// 메인 함수로 테스트 가능
public static void main(String[] args) {
Solution sol = new Solution();
String result = sol.solution(2, 4, 2, 1);
System.out.println(result);
}
}
예를 들어, 입력이 n=2, t=4, m=2, p=1인 경우, 십진법으로 변환하지 않고 이진수 그대로 진행하며, 튜브가 말해야 하는 숫자는 4개입니다. 이진수 순서대로 숫자를 나열하면 다음과 같습니다:
0, 1, 10, 11, 100, 101, 110, 111, ...
이 숫자들을 한 자리씩 끊어서 나열하면:
0, 1, 1, 0, 1, 1, ...
게임에 참가하는 인원이 2명이고, 튜브가 첫 번째 순서로 숫자를 말하므로, 튜브가 말해야 할 숫자는 다음과 같습니다:
1번째: 0 3번째: 1 5번째: 1 7번째: 1
따라서, 튜브가 말해야 하는 숫자는 "0111" 입니다.
만약,
n=16, t=16, m=2, p=1로, 이는 16진법을 사용하며, 튜브(첫 번째 참가자)가 말해야 하는 숫자나 문자가 총 16개임을 의미합니다.
이 경우, 16진법 숫자를 순서대로 나열하면 다음과 같습니다:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 10, 11, 12, ...
이 숫자들을 한 자리씩 끊어서 나열하면 예를 들어 처음 몇 개는 이렇게 됩니다:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 1, 0, 1, 1, ...
게임에 참가하는 인원이 16명이고, 튜브가 첫 번째 순서로 숫자나 문자를 말하므로, 튜브가 말해야 할 숫자나 문자는 다음과 같습니다:
1번째: 0 3번째: 2 5번째: 4 7번째: 6 9번째: 8 11번째: A 13번째: C 15번째: E 17번째: 1 19번째: 1 21번째: 1 23번째: 1 25번째: 1 27번째: 1 29번째: 1 31번째: 1
따라서, 튜브가 말해야 하는 숫자나 문자열은 "02468ACE11111111"입니다.
'Java' 카테고리의 다른 글
프로그래머스: 땅따먹기 (0) | 2024.03.20 |
---|---|
프로그래머스: 주식가격 (0) | 2024.03.19 |
프로그래머스: [3차]압축 (1) | 2024.03.17 |
프로그래머스: k진수에서 소수 개수 구하기 (0) | 2024.03.17 |
프로그래머스: 방문길이 (1) | 2024.03.11 |