์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค

Eager To Learn ๐ŸŒŒ

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/๋ฐ”ํ‚น๋…

[JAVA] ๋ฐฑ์ค€ 5214๋ฒˆ ใ€G2.ํ™˜์Šนใ€‘

2023. 9. 21. 10:17

๋ฌธ์ œ

 

5214๋ฒˆ: ํ™˜์Šน

์ฒซ์งธ ์ค„์— ์—ญ์˜ ์ˆ˜ N๊ณผ ํ•œ ํ•˜์ดํผํŠœ๋ธŒ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญ์˜ ๊ฐœ์ˆ˜ K, ํ•˜์ดํผํŠœ๋ธŒ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 100,000, 1 ≤ K, M ≤ 1000) ๋‹ค์Œ M๊ฐœ ์ค„์—๋Š” ํ•˜์ดํผํŠœ๋ธŒ์˜ ์ •๋ณด๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด

www.acmicpc.net

 

ํ’€์ด

1๏ธโƒฃ bfs์™€ ์ธ์ ‘๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•œ ํ’€์ด

๐Ÿ’ก ์ฐธ๊ณ ํ•œ Idea

์—ญ์˜ ์ˆ˜ N์ด ์ตœ๋Œ€ 100000 ์ด๊ณ  ํ•˜์ดํผ ํŠœ๋ธŒ์™€ ํ•˜์ดํผ ํŠœ๋ธŒ๊ฐ€ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญ์˜ ๊ฐœ์ˆ˜ K ์™€ M์ด ์ตœ๋Œ€ 1000 ์ด๋ผ์„œ

์ผ๋ฐ˜์ ์ธ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘ธ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋ง๋„์•ˆ๋˜๊ฒŒ ์ปค์ ธ์„œ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ๋‹ค.

๊ณ„์† ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผํ• ์ง€ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์•„์ด๋””์–ด๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.

ํ•˜์ดํผ ํŠœ๋ธŒ๋ฅผ ์ผ์ข…์˜ ์—ญ์œผ๋กœ์„œ ์ƒ๊ฐ์„ ํ•˜๊ณ  ๋…ธ๋“œ๋กœ์„œ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๋งŽ์ด ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.



์˜ˆ๋ฅผ ๋“ค์–ด ์—ญ 1๋ฒˆ๊ณผ 

์—ญ 1, 2, 3, 4 ์„ ์—ฐ๊ฒฐํ•˜๋Š” ํ•˜์ดํผ ํŠœ๋ธŒ 1 ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ

๊ธฐ์กด์—๋Š” ์—ญ (1,2) (1,3) (1,4) (2,3) (2,4) (3,4) ์„ ์—ฐ๊ฒฐํ–ˆ์ง€๋งŒ

ํ•˜์ดํผ ํŠœ๋ธŒ 1 ์„ ์—ญ 5๋กœ ๊ฐ€์ •ํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๋ฉด 

(1,5) (2,5) (3,5) (4,5) ๋งŒ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

์—ญ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๊ธฐ์กด ๋ฐฉ์‹์— ๋น„ํ•ด ์—ฐ๊ฒฐํ•˜๋Š” ํšŸ์ˆ˜๋Š” ํฌ๊ฒŒ ๊ฐ์†Œํ•˜๊ฒŒ๋  ๊ฒƒ์ด๋‹ค.


๊ทธ๋ฆฌ๊ณ  bfs๋ฅผ ํ†ตํ•ด ํƒ์ƒ‰์„ ํ•˜๋Š”๋ฐ, ํ•˜์ดํผ ํŠœ๋ธŒ์— ํ•ด๋‹นํ•˜๋Š” ์—ญ์„ ์ง€๋‚˜๊ฐˆ๋•Œ์—๋Š” ์นด์šดํŒ…์„ ํ•ด์ฃผ์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฑฐ์ณ๊ฐ„ ์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int N = Integer.parseInt(input[0]), K = Integer.parseInt(input[1]), M = Integer.parseInt(input[2]);

        List<List<Integer>> nodes = new ArrayList<>();
        
        // ๋ฆฌ์ŠคํŠธ์˜ N-1 ๋ฒˆ๊นŒ์ง€๋Š” ์—ญ, N ๋ถ€ํ„ฐ M-1 ๊นŒ์ง€๋Š” ํ•˜์ดํผํŠœ๋ธŒ(๊ฐ€์งœ ์—ญ)
        for (int i = 0; i < N + M; i++) {
            nodes.add(new ArrayList<>());
        }

		// ์—ญ๊ณผ ํ•˜์ดํผ ํŠœ๋ธŒ ์—ฐ๊ฒฐ
        for (int i = 0; i < M; i++) {
            input = br.readLine().split(" ");
            int hyperTube = N + i;
            for (int j = 0; j < K; j++) {
                int connectedStation = Integer.parseInt(input[j]) - 1;
                nodes.get(hyperTube).add(connectedStation);
                nodes.get(connectedStation).add(hyperTube);
            }
        }


        Queue<Integer> q = new LinkedList<>();
        int[] checked = new int[N + M];
        q.offer(0);
        
        // ์ฒดํฌ ๋ฐฐ์—ด์— ๊ฑฐ์ณ๊ฐ„ ํšŸ์ˆ˜๋ฅผ ๊ธฐ๋ก
        checked[0] = 1;

        while (!q.isEmpty()) {
            int num = q.poll();
            if (num == N - 1) {
                System.out.println(checked[num]);
                System.exit(0);
                break;
            }

            List<Integer> connects = nodes.get(num);

            for (int connect : connects) {
            	// ์•„์ง ๊ฑฐ์ณ๊ฐ„ ์—ญ์ด ์•„๋‹Œ ๊ฒฝ์šฐ๋งŒ
                if (checked[connect] == 0) {
                	// ์—ญ์ด ํ•˜์ดํผ ํŠœ๋ธŒ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ๊ฑฐ์ณ๊ฐ„ ํšŸ์ˆ˜ + 1
                    if (connect < N) {
                        checked[connect] = checked[num] + 1;
                        q.offer(connect);
                    // ๋‹ค์Œ ์—ญ์ด ๊ฐ€์งœ ์—ญ(ํ•˜์ดํผ ํŠœ๋ธŒ) ์ธ ๊ฒฝ์šฐ ํšŸ์ˆ˜ ์ฆ๊ฐ€๋ฅผ ํ•˜์ง€ ์•Š์Œ    
                    } else {
                        checked[connect] = checked[num];
                        q.offer(connect);
                    }
                }
            }
        }
        System.out.println(-1);
    }
}

 

๊ฒฐ๊ณผ

 

์ฒ˜์Œ์—๋Š” ์—ญ์„ ๊ฑฐ์ณ๊ฐ„ ํšŸ์ˆ˜๋„ int[] ๋ฐฐ์—ด๋กœ ํ์— ์ง‘์–ด๋„ฃ๋Š” ๋ฐฉ์‹์„ ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ํšŸ์ˆ˜๋Š” ๋ฐฐ์—ด๋กœ์„œ ๋”ฐ๋กœ ์ฒดํฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์„ ์ ์šฉํ•˜์˜€๋‹ค.

    '๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/๋ฐ”ํ‚น๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [JAVA] ๋ฐฑ์ค€ 20955๋ฒˆ ใ€G4.๋ฏผ์„œ์˜ ์‘๊ธ‰ ์ˆ˜์ˆ ใ€‘
    • [JAVA] ๋ฐฑ์ค€ 22856๋ฒˆ ใ€G4.ํŠธ๋ฆฌ ์ˆœํšŒใ€‘
    • [JAVA] ๋ฐฑ์ค€ 1043๋ฒˆ ใ€G4.๊ฑฐ์ง“๋งใ€‘
    • [JAVA] ๋ฐฑ์ค€ 2617๋ฒˆ ใ€G4.๊ตฌ์Šฌ ์ฐพ๊ธฐใ€‘
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”