N진수 게임

문제정의


0부터 1씩 증가하는 수를 n진수로 표현하고 이를 돌아가면서 한명씩 말하는게 n진수 게임이다. 이 게임에서 주어진 순서의 플레이어가 앞으로 말해야 할 숫자를 계산해주는 프로그램을 짜는 문제이다. 게임 참여 인원과 내가 보고자하는 플레이어의 순서가 주어진다. 문제 링크

문제풀이


전체 코드는 다음과 같다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import java.util.Stack;

public class NthGame {

//프로그래머스 문제풀이 level2 n진수 게임
public static void main(String[] args) {
int n=2, t=4, m=2, p=1;
String answer = "";
String answer = "";
int cnt = 0;
int num = 0;
int idx = 1;
while(cnt < t)
{
Stack<Integer> stack = new Stack<>();
int t_num = num;
do
{
stack.push(t_num%n);
t_num /= n;

}while(t_num > 0);

while(!stack.empty())
{
if(p == idx)
{
String add_num = String.valueOf(stack.peek());
if(add_num.equals("10"))
add_num = "A";
else if(add_num.equals("11"))
add_num = "B";
else if(add_num.equals("12"))
add_num = "C";
else if(add_num.equals("13"))
add_num = "D";
else if(add_num.equals("14"))
add_num = "E";
else if(add_num.equals("15"))
add_num = "F";

answer += add_num;
p += m;
cnt++;
if(cnt == t)
break;
}
idx++;
stack.pop();
}
num++;
}
}
}
cnt는 알려준 숫자이며 이것이 t가 될 때까지 숫자를 n진수로 바꿔볼 것이다. num은 0부터 시작한다. num은 1씩 계속 증가해야 하므로, 실제 연산을 할 땐 t_num에 복사한 값을 쓴다. 0도 진수로 바꾸어야 하기 때문에 do-while문을 사용하였다. n진수로 바꾼 숫자들은 스택에 쌓는다. idx는 현재 몇번째 숫자인지 알려주는 지표이다. 이 idx값이 p값과 일치한다면 그 값을 문자열에 추가하고 p에 m을 더해 다음 차례를 알려준다. idx는 pop을 할 때마다 1씩 증가하도록 한다.

테스트



카카오톡 인턴 시험을 봤는데, 역시 정말 어려웠다. 공부한지 얼마 되지도 않았는데 벌써 기죽지말고 차근차근 해나가자. 발전하고 있다.