개발하는 두부

[Programmers] n진수 게임 (Java)

by 뚜부니

 

 

코딩테스트 연습 - [3차] n진수 게임

N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0

programmers.co.kr

 

이 문제는 n진법을 구하는 방법을 적용하면 쉽게 해결할 수 있는 문제입니다 😎😎

각 숫자의 범위도 크지 않아서 m명의 인원이 t번 동안 진행하면서 나올 수 있는 모든 숫자 리스트를 만들었습니다.

다시 말하자면, [0, 1, 2, 3] 에 대해 2진법으로 말하면

0 → 0

1 → 1

2 → 10

3 → 11

과 같은 방식으로 바꾼 [0, 1, 1, 0, 1, 1]을 저장해두는 방식으로 진행했습니다.

이 때, 리스트에 저장하는게 아닌 n진법 구하는 방식을 쉽게 적용하기 위해 StringBuffer를 이용했어요

현재 구할 숫자가 5이고, 2진법을 적용한다면

5 % 2 = 0, 5 / 2 = 2

2 % 2 = 0, 2 / 2 = 1

이므로 5는 2진법으로 100이잖아요

계산은 위의 순서대로 진행되기 때문에 각 나머지에 대해 저장해두고, 마지막에 몫을 추가하면 001이 되는데

이 001을 뒤집으면 100으로 원하는 값을 구할 수가 있습니다.

이렇게 뒤집는 방식은 StringBuffer에서 제공하는 reverse()로 쉽게 해결할 수 있어요!

그래서 String Buffer를 이용했습니다. 😁😁

 

코드는 다음과 같이 작성했습니다.

 

import java.util.*;

class Solution {
    public String solution(int n, int t, int m, int p) {
        String answer = "";
        StringBuffer strBuff = new StringBuffer(); // 게임 진행 시 숫자에 대해 저장
        String[] decimal = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"}; // 숫자 규칙 적용을 위해 만든 배열
        int gameCnt = t * m; // t * m번 안에 튜브가 t개의 숫자를 말함
        int num = 0; // 게임 숫자는 0부터 시작
        
        while (strBuff.length() < gameCnt) {
            if (num < n)
                strBuff.append(decimal[num]);
            else {
                StringBuffer subStrBuff = new StringBuffer(); // 현재 숫자의 n진법에 대해 임시로 저장할 str
                int temp = num;
                while (temp >= n) {
                    int mod = temp%n;
                    subStrBuff.append(decimal[mod]);
                    temp /= n;
                }
                subStrBuff.append(decimal[temp]);
                strBuff.append(subStrBuff.reverse());
            }
            
            num++;
        }
        
        p--; // 숫자가 0부터 시작이므로 순서는 -1 해줘야 함
        for (int i = 0; i < t; i++) {
            answer += strBuff.charAt(p);
            p += m;
        }
        
        return answer;
    }
}

 

'Algorithm > Programmers' 카테고리의 다른 글

[Programmers] 튜플 (Java)  (0) 2022.09.03
[Programmers] 호텔 방 배정 (Java)  (0) 2022.04.22
[Programmers] 섬 연결하기 (Java)  (0) 2021.06.10
[Programmers] 파일명 정렬 (Java)  (0) 2021.05.05
[Programmers] 구명보트 (Java)  (0) 2021.05.01

블로그의 정보

개발하는 두부

뚜부니

활동하기