Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

코딩응급실

프로그래머스: [3차] n진수 게임 본문

Java

프로그래머스: [3차] n진수 게임

Daeryuk Kim 2024. 3. 17. 23:12
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