[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; } }
블로그의 정보
개발하는 두부
뚜부니