Algorithm

๋ฐฑ์ค€ 11866 ์š”์„ธํ‘ธ์Šค With Queue of JAVA

hyunjun's developing ๐Ÿฃ 2024. 1. 28. 11:12

 


 

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

 

11866๋ฒˆ: ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ 0

์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

 


 

 

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
import java.util.Scanner;
import java.util.LinkedList;
import java.util.Queue;
 
public class Main {
 
    public static void main(String[] args) {
        
        Scanner in = new Scanner(System.in);
        Queue<Integer> q = new LinkedList<>();
        
        int N = in.nextInt();
        int K = in.nextInt();
        
        
        for(int i = 1; i <= N; i++) {
            q.add(i);
        }
        
        StringBuilder sb = new StringBuilder();
        sb.append('<');
        
        
        while(q.size() > 1) {
            
            for(int i = 0; i < K - 1; i++) {
                int val = q.poll();
                q.offer(val);
            }
            
            sb.append(q.poll()).append(", ");
        }
 
        
        sb.append(q.poll()).append('>');
        System.out.println(sb);
    }
 
}
cs

 

 


 

๋จผ์ € ์ด๋ฒˆ์—๋Š” ์Šค์บ๋„ˆ๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ์Šค์บ๋„ˆ์™€ ํ๋ฅผ ํ•˜๋‚˜์”ฉ ์„ ์–ธํ•ด์ค€๋‹ค. ํ๋Š” ์Šคํƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์„ ์ž…์„ ์ถœ ๋ฐฉ์‹์œผ๋กœ ์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ๊ฒƒ์ด ์ œ์ผ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ ๋‹ค์Œ ์Šค์บ๋„ˆ๋ฅผ ํ†ตํ•ด์„œ N๋ช…์˜ ์‚ฌ๋žŒ๊ณผ ์ œ๊ฑฐํ•  ์‚ฌ๋žŒ์˜ ๋ฒˆํ˜ธ์ธ K๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. 

 

for๋ฌธ์„ ์‚ฌ๋žŒ ์ˆ˜๋งŒํผ ๋Œ๋ฉด์„œ ํ์— N๋งŒํผ์˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ StringBuider๋ฅผ ํ•˜๋‚˜ ์„ ์–ธํ•ด์ค€๋‹ค.

 

๊ทธ ๋‹ค์Œ sb์— '<'๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ์™œ๋ƒ๋ฉด ์ด๊ฒƒ๋„  ์ถœ๋ ฅ์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๊ทธ ๋‹ค์Œ ํฌ์ธํŠธ๋กœ ๋“ค์–ด๊ฐ€ ๋ณด๊ฒ ๋‹ค. 

 

1
2
3
4
5
6
7
8
9
10
        while(q.size() > 1) {
            
            for(int i = 0; i < K - 1; i++) {
                int val = q.poll();
                q.offer(val);
            }
            
            sb.append(q.poll()).append(", ");
        }
 
cs

 

์ด ๋ถ€๋ถ„์€ q์— ์›์†Œ๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ฉด ์ž‘๋™ํ•˜๊ฒŒ ๋˜์–ด ์žˆ๋‹ค. ๊ทธ ๋‹ค์Œ for๋ฌธ์„ ๋Œ๋ฉด์„œ 0๋ถ€ํ„ฐ K -1๋ฒˆ๊นŒ์ง€ ๋ฐ˜๋ณต์„ ํ•œ๋‹ค.

์ด๊ฒŒ ๋ฌด์Šจ ์ฝ”๋“œ๋ƒ๋ฉด ์ผ๋‹จ for๋ฌธ์€ ํ์— ๋งจ ์•ž์— ์žˆ๋Š” ๋ฒˆํ˜ธ๋“ค์„ ์ผ๋‹จ ๋’ค๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ํ ๊ตฌ์กฐ์ƒ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฒƒ์„ ์‚ญ์ œํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ ๋‹ค์Œ ๊ทธ ๊ณผ์ •์ด ์™„๋ฃŒ๊ฐ€ ๋˜๋ฉด ๋‹ค์‹œ ํ์—์„œ ๋งจ ์•ž์—์žˆ๋Š” ์ˆซ์ž๋ฅผ ๋ฝ‘์•„์„œ ์šฐ๋ฆฌ๊ฐ€ ์ถœ๋ ฅํ•  sb์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.์‚ฌ์ด์‚ฌ์ด๊ฐ€ ","๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ๋„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ๊ทธ ๋‹ค์Œ ๊ด„ํ˜ธ๋ฅผ ์ŠคํŠธ๋ง ๋นŒ๋”์— ๋„ฃ์–ด์ฃผ๊ณ  ๊ทธ๊ฒƒ์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. 

 

round 1

   loop 1 : {1, 2, 3, 4, 5, 6, 7}  → {2, 3, 4, 5, 6, 7, 1

   loop 2 : {2, 3, 4, 5, 6, 7, 1}  → {3, 4, 5, 6, 7, 1, 2

   loop 3 : {3, 4, 5, 6, 7, 1, 2}  → 3 ์ถœ๋ ฅ

 

round 2

   loop 1 : {4, 5, 6, 7, 1, 2}  → {5, 6, 7, 1, 2, 4

   loop 2 : {5, 6, 7, 1, 2, 4}  → {6, 7, 1, 2, 45

   loop 3 : {6, 7, 1, 2, 4, 5}  → 6 ์ถœ๋ ฅ

 

round 3

   loop 1 : {7, 1, 2, 4, 5}  → {1, 2, 4, 5, 7

   loop 2 : {1, 2, 4, 5, 7}  → {2, 4, 5, 71

   loop 3 : {2, 4, 5, 7, 1}  → 2 ์ถœ๋ ฅ

 

round 4

   loop 1 : {4, 5, 7, 1}  → {5, 7, 1, 4

   loop 2 : {5, 7, 1, 4}  → {7, 1, 4, 5

   loop 3 : {7, 1, 4, 5}  → 7 ์ถœ๋ ฅ

 

round 5

   loop 1 : {1, 4, 5}  → {4, 5, 1

   loop 2 : {4, 5, 1}  → {5, 1, 4

   loop 3 : {5, 1, 4}  → 5 ์ถœ๋ ฅ

 

round 6

   loop 1 : {1, 4}  → {4, 1

   loop 2 : {41}  → {1, 4

   loop 3 : {1, 4}  → 1 ์ถœ๋ ฅ

 

round 7

   loop 1 : {4}  → {4

   loop 2 : {4}  → {4}

   loop 3 : {4}  → 4 ์ถœ๋ ฅ

 

์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.