๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 1068_ํŠธ๋ฆฌ

๋ฟŒ์•ผ._. 2022. 3. 25. 17:07

Gold V

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/1068)

<ํŠธ๋ฆฌ>

๋ฌธ์ œ 

 

ํŠธ๋ฆฌ์—์„œ ๋ฆฌํ”„ ๋…ธ๋“œ๋ž€, ์ž์‹์˜ ๊ฐœ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋ฅผ ๋งํ•œ๋‹ค.
ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋…ธ๋“œ ํ•˜๋‚˜๋ฅผ ์ง€์šธ ๊ฒƒ์ด๋‹ค. ๊ทธ๋•Œ, ๋‚จ์€ ํŠธ๋ฆฌ์—์„œ ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋…ธ๋“œ๋ฅผ ์ง€์šฐ๋ฉด ๊ทธ ๋…ธ๋“œ์™€ ๋…ธ๋“œ์˜ ๋ชจ๋“  ์ž์†์ด ํŠธ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž.

ํ˜„์žฌ ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” 3๊ฐœ์ด๋‹ค. (์ดˆ๋ก์ƒ‰ ์ƒ‰์น ๋œ ๋…ธ๋“œ) ์ด๋•Œ, 1๋ฒˆ์„ ์ง€์šฐ๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ•œ๋‹ค. ๊ฒ€์ •์ƒ‰์œผ๋กœ ์ƒ‰์น ๋œ ๋…ธ๋“œ๊ฐ€ ํŠธ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋œ ๋…ธ๋“œ์ด๋‹ค.

์ด์ œ ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” 1๊ฐœ์ด๋‹ค.

 

 

์ž…๋ ฅ

 

์ฒซ์งธ ์ค„์— ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” 0๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ N-1๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋งŒ์•ฝ ๋ถ€๋ชจ๊ฐ€ ์—†๋‹ค๋ฉด (๋ฃจํŠธ) -1์ด ์ฃผ์–ด์ง„๋‹ค. ์…‹์งธ ์ค„์—๋Š” ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ 

 

์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ํŠธ๋ฆฌ์—์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋…ธ๋“œ๋ฅผ ์ง€์› ์„ ๋•Œ, ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฌธ์ œ ํ’€์ด

   - my solution (Python)

import sys

def delnode(graph, start):
    queue=[start]

    while queue:
        temp=queue.pop(0)
        for i in graph[temp]: # ์ง€์šธ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ
            queue.append(i)

        del graph[temp]

if __name__ =='__main__':
    n=int(input()) # ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜

    graph={}
    for i in range(n):
        graph[i]=[]

    info=list(map(int, sys.stdin.readline().split())) # ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ

    for i in range(len(info)):
        if info[i]==-1: # ๋ฃจํŠธ
            pass
        else:
            graph[info[i]].append(i)

    d=int(input()) # ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ

    answer=0 # ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
    delnode(graph, d)

    for key,value in graph.items():
        if d in value: # ๋…ธ๋“œ ์ง€์›€
            graph[key].remove(d)
        if len(value)==0: # ๋ฆฌํ”„ ๋…ธ๋“œ ๊ฐœ์ˆ˜
            answer+=1

    print(answer)

 

- my solution (JAVA)

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

public class Main {
	static int answer=0; //๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
	
	static void delnode(HashMap graph, int d ) {
		List<Integer> queue=new ArrayList<>();
		queue.add(d);
		
		while(queue.size()!=0) { // queue๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€
			int temp=queue.remove(0);
			List<Integer>a=(List<Integer>) graph.get(temp);
			if(a.size()>0) { // ์ง€์šธ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ
				for(int i=0; i<a.size(); i++) {
					queue.add(a.get(i));
				}
			}
			graph.remove(temp);
			
		}
	}

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		
		HashMap<Integer, List> graph=new HashMap<>();
		int n=input.nextInt(); // ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
		
		for(int i=0; i<n; i++) { 
			List<Integer> a=new ArrayList<>();
			graph.put(i, a);
		}
		
		int info[]=new int[n];
		
		for(int i=0; i<n; i++) { // ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ
			info[i]=input.nextInt();
		}
		
		for(int i=0; i<info.length; i++) {
			if(info[i]==-1) { // ๋ฃจํŠธ
				continue;
			}else {
				List<Integer>temp=graph.get(info[i]);
				temp.add(i);
				graph.put(info[i], temp);
			}
		}
		int d=input.nextInt(); // ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ
		delnode(graph,d);
		
		graph.forEach((key, value) ->{
			if(value.contains(d)) { // ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค๋ฉด ์‚ญ์ œ
				List<Integer> delkey=graph.get(key);
				delkey.remove(Integer.valueOf(d));
				graph.put(key, delkey);
			}
			if(value.size()==0) { // ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ ์ถ”๊ฐ€
				answer+=1;
			}
		});
		System.out.println(answer);
	}
}

 

  • delnode
    : ์ฒ˜์Œ์— queue์— ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋‹ด์€ ํ›„ temp์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ queue์— ๋‹ด๊ณ  graph์—์„œ temp๋ฅผ ํ‚ค๋กœ ๊ฐ€์ง„ ๊ฒƒ์„ ์‚ญ์ œ
  • Main
    :๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ, ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ ์ž…๋ ฅ
    : answer = ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
    : graph = [key: ๋…ธ๋“œ์˜ ๋ถ€๋ชจ, value: ๋…ธ๋“œ]
    : delnode ํ˜ธ์ถœ (  graph, ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ)
    : graph์—๋Š” ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ์ง€์šด ํ›„์˜ ์ƒํƒœ๋กœ ์กด์žฌ. ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๊ฐ€ value์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ ํ›„ ์กด์žฌํ•œ๋‹ค๋ฉด value์—์„œ ์‚ญ์ œ. value์˜ ๊ธธ์ด๊ฐ€ 0์ด๋ผ๋ฉด ๋ฆฌํ”„ ๋…ธ๋“œ์ด๋ฏ€๋กœ answer +1

 

โ“ ์ฒ˜์Œ์— ์™œ ํ‹€๋ ธ๋Š”๊ฐ€?

์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ž์‹ ๋…ธ๋“œ์— ์žˆ์„๋•Œ ์ž์‹ ๋…ธ๋“œ์—์„œ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ๋นผ๋จน์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งจ ์ฒ˜์Œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๋ฅผ key๊ฐ’์œผ๋กœ ๊ฐ€์ง„ ๊ฒƒ์„ ์‚ญ์ œํ•˜๋ฉฐ, ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ง€์šธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๋ฅผ value๋กœ ๊ฐ€์งˆ ๋•Œ value์—์„œ ์‚ญ์ œํ•˜์ง€ ์•Š์•„ ๋‹ต์ด ๋‹ค๋ฅด๊ฒŒ ๋‚˜์™”๋˜ ๊ฒƒ์ด์—ˆ๋‹ค.

 


์ƒ๊ฐ๐Ÿค”

 

์˜ค๋žœ๋งŒ์— JAVA๋กœ๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋ดค๋‹ค. 

๋จผ์ € Python์œผ๋กœ ๊ตฌํ˜„ ํ›„ JAVA๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž„์—๋„ ์˜ค๋žœ๋งŒ์ด๋ผ ์กฐ๊ธˆ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

 


 

 

 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 6198_์˜ฅ์ƒ ์ •์› ๊พธ๋ฏธ๊ธฐ  (0) 2022.03.29
[Baekjoon] 2493_ํƒ‘  (0) 2022.03.28
[Baekjoon] 3190_๋ฑ€  (0) 2022.03.23
[Baekjoon] 7569_ํ† ๋งˆํ†   (0) 2022.03.22
[Baekjoon] 7576_ํ† ๋งˆํ†   (0) 2022.03.21