프로그래밍 공방

[백준] 9436번 : Round Robin 본문

개발/문제해결

[백준] 9436번 : Round Robin

hyosupsong 2020. 11. 21. 00:12

문제

https://www.acmicpc.net/problem/9436


문제해결방법

실제로 주어진 N과 T를 사용해서 리스트를 순회하면서 T번 마다 노드를 제거해주고 모든 노드의 값이 같은지 확인해준다.


POINT

위 방법이 마음에 안 들어서 인터넷을 찾아보았다.

이 문제의 핵심은 "남은 나머지를 다시 T에 더한다" 였다.

나머지가 플레이어로 나누어 떨어지거나 하나 더 받는 플레이어가 게임에서 나가는 경우에 반복문을 탈출한다.

해당 방법으로 푼 코드는 추후에 업데이트 하겠습니다.


코드


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
package blogQueue;
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
 
public class Main9436_RoundRobin {
    public static boolean check(List<Integer> list) {
        int temp = list.get(0);
        for(int item : list) {
            if(temp != item) return false;
        }
        return true;
    }
 
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        while(true) {
            st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
            if(N==0break;
            int T = Integer.parseInt(st.nextToken());
            List<Integer> list = new ArrayList<Integer>();
            for(int i=0; i<N; i++) list.add(0);
            int index = 0;
            while(list.size()>=1) {
                int size = list.size();
                int t = T;
                while(t>0) {
                    list.set(index, list.get(index)+1);
                    index++;
                    t--;
                    index%=size;
                }
                index = index==0?size-1:index-1;
                list.remove(index);
                index = index==size-1?0:index;
                if(check(list)) break;
            }
            System.out.println(list.size()+" "+list.get(0));
        }
    }
}
cs

코드에 대한 피드백이나 더 좋은 아이디어는 언제나 환영입니다.