[백준_Queue]1158_조세퍼스 문제
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 |