[백준_Queue]1158_조세퍼스 문제

Posted by 열정보이
2018. 11. 25. 11:36 Algorithms

Queue를 이용한 조세퍼스 문제!!


"조세퍼스 순열이 뭐야??" 를 이해하기만 하면 너무나 풀기 쉬운 문제다


N이 4이고, M이 2일 경우는 다음과 같다


Queue에 있는 맨 앞의 수를 빼는데, 그 횟수가 N번째일 때만 정답으로 출력할 수 있게 하고, 


아닐 경우 다시 그 수를 Queue에 넣어주면 된다!! 바로 코드를 보도록 하자!


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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
 
public class Al1158 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer token = new StringTokenizer(br.readLine());
        StringBuilder builder = new StringBuilder();
        
        int N = Integer.parseInt(token.nextToken());
        int M = Integer.parseInt(token.nextToken());
        if(N == 1){
            System.out.println("<1>"); return;
        }
        Queue<Integer> qu = new LinkedList<>();
        for (int i = 1; i <= N; i++) qu.add(i);
        
        int cnt = 0;
        while(!qu.isEmpty()){
            int temp = qu.poll();
            cnt++;
            
            if(cnt == M){
                if(qu.size() == N-1) {
                    builder.append("<"+temp+", ");
                }else if(qu.isEmpty()){
                    builder.append(temp+">");
                }else{
                    builder.append(temp+", ");                    
                }
                cnt = 0;
            }else{
                qu.add(temp);
            }
        }
        System.out.println(builder.toString());
    }
}
 
cs


이때 처음과 끝은 < , > 로 묶어 줘야 하는것만 주의하면 아주 쉽게 정답~~


그럼 다음에는 어떤 분류의 문제를 풀어볼지 고민해야 겠다!

'Algorithms' 카테고리의 다른 글

[백준_Math]1085_직사각형에서 탈출  (0) 2018.12.05
[백준_Math]1475_방 번호  (0) 2018.12.01
[백준_Queue]1966번_프린터 큐  (0) 2018.11.18
[백준_Queue]10845번_큐  (0) 2018.11.13
[백준_Stack]1874번_스택 수열  (0) 2018.11.11