Home [BaekJoon] 1966 ํ”„๋ฆฐํ„ฐ ํ JAVA
Post
Cancel

[BaekJoon] 1966 ํ”„๋ฆฐํ„ฐ ํ JAVA

๐Ÿ”— ๋ฐฑ์ค€ 1966 ํ”„๋ฆฐํ„ฐ ํ https://www.acmicpc.net/problem/1966

๋ฌธ์ œ

์—ฌ๋Ÿฌ๋ถ„๋„ ์•Œ๋‹ค์‹œํ”ผ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋ฆฐํ„ฐ ๊ธฐ๊ธฐ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ธ์‡„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ธ์‡„ ๋ช…๋ น์„ ๋ฐ›์€ โ€˜์ˆœ์„œ๋Œ€๋กœโ€™, ์ฆ‰ ๋จผ์ € ์š”์ฒญ๋œ ๊ฒƒ์„ ๋จผ์ € ์ธ์‡„ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ์Œ“์ธ๋‹ค๋ฉด Queue ์ž๋ฃŒ๊ตฌ์กฐ์— ์Œ“์—ฌ์„œ FIFO - First In First Out - ์— ๋”ฐ๋ผ ์ธ์‡„๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ƒ๊ทผ์ด๋Š” ์ƒˆ๋กœ์šด ํ”„๋ฆฐํ„ฐ๊ธฐ ๋‚ด๋ถ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜์˜€๋Š”๋ฐ, ์ด ํ”„๋ฆฐํ„ฐ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ธ์‡„๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.

  1. ํ˜„์žฌ Queue์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์„œ์˜ โ€˜์ค‘์š”๋„โ€™๋ฅผ ํ™•์ธํ•œ๋‹ค.
  2. ๋‚˜๋จธ์ง€ ๋ฌธ์„œ๋“ค ์ค‘ ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด, ์ด ๋ฌธ์„œ๋ฅผ ์ธ์‡„ํ•˜์ง€ ์•Š๊ณ  Queue์˜ ๊ฐ€์žฅ ๋’ค์— ์žฌ๋ฐฐ์น˜ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ฐ”๋กœ ์ธ์‡„๋ฅผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Queue์— 4๊ฐœ์˜ ๋ฌธ์„œ(A B C D)๊ฐ€ ์žˆ๊ณ , ์ค‘์š”๋„๊ฐ€ 2 1 4 3 ๋ผ๋ฉด C๋ฅผ ์ธ์‡„ํ•˜๊ณ , ๋‹ค์Œ์œผ๋กœ D๋ฅผ ์ธ์‡„ํ•˜๊ณ  A, B๋ฅผ ์ธ์‡„ํ•˜๊ฒŒ ๋œ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด ํ•  ์ผ์€, ํ˜„์žฌ Queue์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ์ˆ˜์™€ ์ค‘์š”๋„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์–ด๋–ค ํ•œ ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ์˜ˆ์—์„œ C๋ฌธ์„œ๋Š” 1๋ฒˆ์งธ๋กœ, A๋ฌธ์„œ๋Š” 3๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๊ฒŒ ๋œ๋‹ค.


์ž…๋ ฅ

์ฒซ ์ค„์— ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋Š” ๋‘ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋ฌธ์„œ์˜ ๊ฐœ์ˆ˜ N(1 โ‰ค N โ‰ค 100)๊ณผ, ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•œ ๋ฌธ์„œ๊ฐ€ ํ˜„์žฌ Queue์—์„œ ๋ช‡ ๋ฒˆ์งธ์— ๋†“์—ฌ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ M(0 โ‰ค M < N)์ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ ๋งจ ์™ผ์ชฝ์€ 0๋ฒˆ์งธ๋ผ๊ณ  ํ•˜์ž. ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” N๊ฐœ ๋ฌธ์„œ์˜ ์ค‘์š”๋„๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ค‘์š”๋„๋Š” 1 ์ด์ƒ 9 ์ดํ•˜์˜ ์ •์ˆ˜์ด๊ณ , ์ค‘์š”๋„๊ฐ€ ๊ฐ™์€ ๋ฌธ์„œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค.


์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.


ํ’€์ด

์ด ๋ฌธ์ œ๋Š” Queue๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ–ˆ๋˜ ๋ฌธ์ œ์ด๋‹ค.

์ž…๋ ฅ ๋“ค์–ด์˜จ N๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ํ ์•ˆ์— ๋‚˜์—ด๋˜์–ด์žˆ๊ณ , ๊ทธ ์ค‘ ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ poll() ํ•ด์•ผํ–ˆ๋‹ค.

์ฆ‰, ๊ฐ ๋ฌธ์„œ์™€ ๋ฌธ์„œ์˜ ์ค‘์š”๋„๋ฅผ ๊ฐ–๊ณ ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋‚˜๋Š” ์ด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด static member class๋ฅผ ์ƒ์„ฑํ•˜์—ฌ์คฌ๋‹ค.

Inner class ์™€ static member class

Inner class๋ฅผ new ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘๊ฐœ์˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ๋‹ค๋ฅธ ์ฐธ์กฐ๋ฅผ ๊ฐ–์€ ๋‘๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

static member class๋กœ๋„ ๋‘๋ฒˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด static์ด ๋ถ™์—ˆ๋‹ค๊ณ  ํ•ด์„œ ๊ฐ™์€ ์ฐธ์กฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ฆ‰, ํด๋ž˜์Šค์— static ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™๊ฒŒ ๋œ๋‹ค๋ฉด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐฉ์‹์ด ๋ณ€ํ™”ํ•  ๋ฟ, ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šค์˜ ์—ญํ• ์„ ํ•˜๋Š”๊ฒƒ์€ ์•„๋‹ˆ๋‹ค๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

Inner Class

  1. new ์—ฐ์‚ฐ์ž๋ฅผ ๋‘๋ฒˆ ์‚ฌ์šฉํ•˜์—ฌ ๋‘๊ฐœ์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ ๋‹ค๋ฅธ ์ฐธ์กฐ๋ฅผ ๊ฐ–์€ ๋‘๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

  2. ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์กด์žฌํ•ด์•ผ๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

    • Inner class๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ˆจ์€ ์™ธ๋ถ€ ์ฐธ์กฐ๋ฅผ ๊ฐ–๊ฒŒ๋œ๋‹ค.

static member class

  1. new ์—ฐ์‚ฐ์ž๋ฅผ ํ•œ๋ฒˆ ์‚ฌ์šฉํ•˜์—ฌ ๋‘๊ฐœ์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ ๋‹ค๋ฅธ ์ฐธ์กฐ๋ฅผ ๊ฐ–์€ ๋‘๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
    • ํด๋ž˜์Šค์— static ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™๊ฒŒ๋œ๋‹ค๋ฉด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐฉ์‹์ด ๋ณ€ํ™”ํ•  ๋ฟ, ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šค์˜ ์—ญํ• ์„ ํ•˜๋Š”๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  2. ์™ธ๋ถ€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์—†์–ด๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
    • ์™ธ๋ถ€ ์ฐธ์กฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

์™ธ๋ถ€ ์ฐธ์กฐ์˜ ๋‹จ์ 

  1. ์ฐธ์กฐ๊ฐ’์„ ๋‹ด์•„์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์‹œ ์‹œ๊ฐ„๊ณต๊ฐ„์  ์„ฑ๋Šฅ ์ €ํ•˜
  2. ์™ธ๋ถ€ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋กœ ์ธํ•ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜๊ฑฐํ•˜์ง€ ๋ชปํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ๋ฐœ์ƒ

์ฆ‰, ๋‚ด๋ถ€ ํด๋ž˜์Šค ์„ ์–ธ ์‹œ์—๋Š” static member class๋กœ ์ƒ์„ฑํ•˜๋Š” ํŽธ์ด ์ด์ ์ด ๋” ๋งŽ๋‹ค.

์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ https://siyoon210.tistory.com/141

๊ทธ๋ฆฌ๊ณ  ๋ฌธ์„œ์˜ ์ค‘์š”๋„๋งŒ ๊ฐ–๋Š” PriorityQueue๋„ ๋”ฐ๋กœ ์„ ์–ธํ•˜์—ฌ์คฌ๋‹ค.

PriorityQueue (์šฐ์„ ์ˆœ์œ„ ํ)

PriorityQueue

์ผ๋ฐ˜์ ์ธ ํ์˜ ๊ตฌ์กฐ์ธ FIFO๋ฅผ ๊ฐ–์ง€๋งŒ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , ๊ทธ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ๊ตฌ์กฐ์ด๋‹ค.

PriorityQueue ํŠน์ง•

  1. ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์š”์†Œ๋ฅผ ๋จผ์ € ๊บผ๋‚ด์–ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

  2. ๋‚ด๋ถ€ ์š”์†Œ๋Š” Heap์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์ด์ง„ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ์ด๋‹ค.

  3. ๋‚ด๋ถ€ ์š”์†Œ๊ฐ€ Heap์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(nLogn)์ด๋‹ค.

์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ https://velog.io/@gillog/Java-Priority-Queue%EC%9A%B0%EC%84%A0-%EC%88%9C%EC%9C%84-%ED%81%90

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
55
56
57
58
59
import java.io.*;
import java.util.*;

public class Main {
    static class Papers{
        int paper, priority;

        public Papers(int paper, int priority) {
            this.paper = paper;
            this.priority = priority;
        }
    }

    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        Queue<Papers> q = new LinkedList<>();
        
        // ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์•ผํ•˜๋ฏ€๋กœ reverseOrder๋ฅผ ํ†ตํ•ด ์—ญ์ •๋ ฌ์„ ํ•ด์ค€๋‹ค.
        PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());

        int t = Integer.parseInt(br.readLine());

        for(int i = 0; i < t; i++) {
            st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());
            int m = Integer.parseInt(st.nextToken());

            st = new StringTokenizer(br.readLine());
            for(int j = 0; j < n; j++) {
                int priority = Integer.parseInt(st.nextToken());
                q.add(new Papers(j,priority));
                pq.add(priority);
            }

            int count = 1; // ๋ช‡๋ฒˆ์งธ์ธ์ง€ ์นด์šดํŠธ
            while(true) {
                // ํ์˜ ์ฒซ ์›์†Œ์˜ ์ค‘์š”๋„์™€ ์šฐ์„ ์ˆœ์œ„ํ์˜ ์ œ์ผ ๋†’์€ ์ค‘์š”๋„๊ฐ€ ์ผ์น˜ํ•˜๋ฉด
                if(Objects.requireNonNull(q.peek()).priority == Objects.requireNonNull(pq.peek())) {
                    // ๋ชฉํ‘œํ•œ ์›์†Œ๋ผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋ฉˆ์ถ˜๋‹ค
                    if(q.peek().paper == m) break;
                    // ์•„๋‹ˆ๋ผ๋ฉด ์นด์šดํŠธ๋ฅผ ์˜ฌ๋ ค์ฃผ๊ณ 
                    count++;
                    // ํ์™€ ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ํ•ด๋‹น ๋ฌธ์„œ, ํ•ด๋‹น ์ค‘์š”๋„๋ฅผ ๋นผ์ค€๋‹ค
                    q.poll();
                    pq.poll();
                    
                // ํ์˜ ์ฒซ ์›์†Œ ์ค‘์š”๋„์™€ ์šฐ์„ ์ˆœ์œ„ ํ์˜ ์ œ์ผ ๋†’์€ ์ค‘์š”๋„๊ฐ€ ์ผ์น˜ํ•˜์ง€์•Š๋‹ค๋ฉด ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ํ์˜ ๋งจ ๋’ค๋กœ ๋ณด๋‚ด์ค€๋‹ค
                } else q.add(q.poll());
            }
            q.clear();
            pq.clear();
            sb.append(count).append("\n");
        }
        System.out.println(sb);
    }
}
This post is licensed under CC BY 4.0 by the author.

[BaekJoon] 11050 ์ดํ•ญ ๊ณ„์ˆ˜ 1 JAVA

[BaekJoon] 11866 ์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ 0 JAVA