did_story

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / JAVA] ๋„๋„›๊ณผ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„. ๋ณธ๋ฌธ

Algorithm๐ŸŒŠ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Programmers)

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / JAVA] ๋„๋„›๊ณผ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„.

์–ด์ œ์‹œ์ž‘ 2025. 9. 30. 02:27

๋ฌธ์ œ ์„ค๋ช…

๋„๋„› ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„, ๋ง‰๋Œ€ ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„, 8์ž ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ทธ๋ž˜ํ”„๋“ค๊ณผ ๋ฌด๊ด€ํ•œ ์ •์ ์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•œ ๋’ค, ๊ฐ ๋„๋„› ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„, ๋ง‰๋Œ€ ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„, 8์ž ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„์˜ ์ž„์˜์˜ ์ •์  ํ•˜๋‚˜๋กœ ํ–ฅํ•˜๋Š” ๊ฐ„์„ ๋“ค์„ ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๊ฐ ์ •์ ์— ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ฒผ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ๋‹น์‹ ์€ ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„  ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ƒ์„ฑํ•œ ์ •์ ์˜ ๋ฒˆํ˜ธ์™€ ์ •์ ์„ ์ƒ์„ฑํ•˜๊ธฐ ์ „ ๋„๋„› ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„์˜ ์ˆ˜, ๋ง‰๋Œ€ ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„์˜ ์ˆ˜, 8์ž ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„  ์ •๋ณด๋ฅผ ๋‹ด์€ 2์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด edges๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ, ์ƒ์„ฑํ•œ ์ •์ ์˜ ๋ฒˆํ˜ธ, ๋„๋„› ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„์˜ ์ˆ˜, ๋ง‰๋Œ€ ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„์˜ ์ˆ˜, 8์ž ๋ชจ์–‘ ๊ทธ๋ž˜ํ”„์˜ ์ˆ˜๋ฅผ ์ˆœ์„œ๋Œ€๋กœ 1์ฐจ์› ์ •์ˆ˜ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 

๋ฌธ์ œ ํ’€์ด

ํ•ด๋‹น ๋ชจ์–‘๋งˆ๋‹ค, ๊ฐ„์„ ์˜ in ๊ฐฏ์ˆ˜์™€, out์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜์žˆ์—ˆ๋‹ค.
1. ๋„๋„› ๋ชจ์–‘์ธ ๊ฒฝ์šฐ input๊ณผ output์ด 1๊ฐœ์”ฉ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธ
2. ๋ง‰๋Œ€ ๋ชจ์–‘์ธ ๊ฒฝ์šฐ input๊ณผ output์ด 1๊ฐœ์”ฉ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธ => ๋งˆ์ง€๋ง‰ node ๊ฒฝ์šฐ input์ด ์žˆ์ง€๋งŒ output์ด ์—†๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
3. 8์ž ๋ชจ์–‘์ธ ๊ฒฝ์šฐ input๊ณผ output์ด 2, 2๊ฐœ ์”ฉ ์žˆ๋Š” node๋ฅผ ํ™•์ธ,

๋”ฐ๋ผ์„œ 2๋ฒˆ๊ณผ 3๋ฒˆ์„ ๊ตฌํ•˜๋ฉด, ์ด ์ •์ ์—์„œ ๋‚˜๊ฐ„ ๊ฐ„์„ ์˜ ๊ฐฏ์ˆ˜์—์„œ ํ•ด๋‹น ๋ฒˆํ˜ธ์˜ ์ฐจ๋ฅผ ํ†ตํ•ด 1๋ฒˆ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ฝ”๋“œ

import java.util.HashMap;

class Solution {
    public int[] solution(int[][] edges) {
        int[] answer = new int[4];
        HashMap<Integer, Integer> out = new HashMap<>();
        HashMap<Integer, Integer> in = new HashMap<>();

        for (int[] edge : edges) {
            out.put(edge[0], out.getOrDefault(edge[0], 0) + 1);
            in.put(edge[1], in.getOrDefault(edge[1], 0) + 1);
        }

        for (int key : out.keySet()){
            if (out.get(key) > 1){
                if (!in.containsKey(key)) answer[0] = key;
                else answer[3]++;
            }
        }

        for (int key : in.keySet()) if (!out.containsKey(key)) answer[2]++;


        answer[1] = out.get(answer[0]) - answer[2] - answer[3];
        return answer;
    }
}

 

๊นจ๋‹ฌ์€ ์ 

์ฒ˜์Œ์— ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  output์˜ key๋กœ input์ด ์—†๋Š” ๊ฒƒ์œผ๋กœ ๋ง‰๋Œ€ ๋ชจ์–‘์„ ์ฐพ์„๋ ค๋‹ค๊ฐ€, ํ‹€๋ ธ๋‹ค ๋ผ๋Š” ๋‹ต๋ณ€์„ ๋ฐ›๊ณ  ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋Š” ๊ฒฝํ—˜์„ ํ–ˆ๋‹ค. ํ‹€๋ ธ์„ ๋•Œ, ๋‚˜์˜ ์ฝ”๋“œ์˜ ์ด์œ ๋ฅผ ์ฐพ์•„๊ฐ€๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๋ฉด ์ข‹์€ ๊ฒฐ๊ณผ๋กœ ์ด์–ด์ง„๋‹ค๋Š” ์ƒ๊ฐ์„ ๋‹ค์‹œ ๋ฐ›๋Š”๋‹ค. 
๋˜ ํ•˜๋‚˜ HashMap์—์„œ ์ง€์›ํ•˜๋Š” method ๊นŒ๋จน์ž ๋ง์ž put์„ push๋กœ ๊ธฐ์–ตํ•˜๋˜๊ฐ€ ๋“ฑ๋“ฑ