๐Ÿ”ฅ[99ํด๋Ÿฝ ์ฝ”ํ…Œ ์Šคํ„ฐ๋””] 14์ผ์ฐจ TIL - ์ˆซ์ž ์นด๋“œ2

HOONSSACยท2024๋…„ 8์›” 4์ผ
1

99Club Coding Test Study

๋ชฉ๋ก ๋ณด๊ธฐ
14/41
post-thumbnail

โณ๋ฌธ์ œ

์ˆซ์ž ์นด๋“œ๋Š” ์ •์ˆ˜ ํ•˜๋‚˜๊ฐ€ ์ ํ˜€์ ธ ์žˆ๋Š” ์นด๋“œ์ด๋‹ค. ์ƒ๊ทผ์ด๋Š” ์ˆซ์ž ์นด๋“œ N๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ •์ˆ˜ M๊ฐœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ์ˆ˜๊ฐ€ ์ ํ˜€์žˆ๋Š” ์ˆซ์ž ์นด๋“œ๋ฅผ ์ƒ๊ทผ์ด๊ฐ€ ๋ช‡ ๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ˆซ์ž ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N(1 โ‰ค N โ‰ค 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ˆซ์ž ์นด๋“œ์— ์ ํ˜€์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆซ์ž ์นด๋“œ์— ์ ํ˜€์žˆ๋Š” ์ˆ˜๋Š” -10,000,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

์…‹์งธ ์ค„์—๋Š” M(1 โ‰ค M โ‰ค 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋„ท์งธ ์ค„์—๋Š” ์ƒ๊ทผ์ด๊ฐ€ ๋ช‡ ๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ˆซ์ž ์นด๋“œ์ธ์ง€ ๊ตฌํ•ด์•ผ ํ•  M๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ์ด ์ˆ˜๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์ ธ ์žˆ๋‹ค. ์ด ์ˆ˜๋„ -10,000,000๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ M๊ฐœ์˜ ์ˆ˜์— ๋Œ€ํ•ด์„œ, ๊ฐ ์ˆ˜๊ฐ€ ์ ํžŒ ์ˆซ์ž ์นด๋“œ๋ฅผ ์ƒ๊ทผ์ด๊ฐ€ ๋ช‡ ๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

์˜ˆ์ œ ์ž…๋ ฅ 1

6 3 2 10 10 10 -10 -10 7 3
8
10 9 -5 2 3 4 5 -10

์˜ˆ์ œ ์ถœ๋ ฅ 1

3 0 0 1 2 0 0 2

โœ๏ธํ’€์ด

์ผ๋‹จ ๋ฌธ์ œ ๋‚ด์šฉ ์ž์ฒด๋Š” ์–ด์ œ์˜ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•˜๋‹ค.

์ตœ์ข… ์ฝ”๋“œ

๋‹ค๋งŒ, ์ด๋ฒˆ์—๋Š” ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ์ค‘๋ณต์ด ํ—ˆ์šฉ๋˜๊ณ , ๊ฐฏ์ˆ˜๋ฅผ countํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—,
Hash Set ๋Œ€์‹  Hash Map์„ ์‚ฌ์šฉํ•ด์„œ ์ ‘๊ทผํ•˜์˜€๋‹ค.

import java.util.*;

public class Baekjoon_10816 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        HashMap<Integer, Integer> countMap = new HashMap<>();
        StringBuilder result = new StringBuilder();

        int N = sc.nextInt();
        for (int i = 0; i < N; i++) {
            int input = sc.nextInt(); // ์ƒ๊ทผ์ด์˜ ์นด๋“œ ์ž…๋ ฅ
            if (!countMap.containsKey(input)) {
            	// Map์— ์—†์œผ๋ฉด ์ž…๋ ฅ๊ฐ’์„ key๋กœ ๊ฐ€์ง€๋Š” value(๊ฐฏ์ˆ˜)๋ฅผ 1๋กœ ์ €์žฅ
                countMap.put(input, 1); 
            }
            else {
            	// ์ด๋ฏธ ํ•ด๋‹น ๊ฐ’์ด ๋“ค์–ด์žˆ๋‹ค๋ฉด value(๊ฐฏ์ˆ˜)๋ฅผ 1์ฆ๊ฐ€
                countMap.replace(input, countMap.get(input) + 1);
            }
        }

        int M = sc.nextInt();
        for (int i = 0; i < M; i++) {
            int input = sc.nextInt(); // ๊ฐฏ์ˆ˜๋ฅผ ์…€ ์ •์ˆ˜ ์ž…๋ ฅ
            if (countMap.containsKey(input)) {
            	// ์ž…๋ ฅ๋œ ์ •์ˆ˜๊ฐ€ Map์— ์กด์žฌํ•œ๋‹ค๋ฉด
                // ํ•ด๋‹น ์ •์ˆ˜๋ฅผ key๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” value(๊ฐœ์ˆ˜) ๋ฐ˜ํ™˜
                result.append(Integer.toString(countMap.get(input)) + " ");
            }
            else {
            	// ์ž…๋ ฅ๋œ ์ •์ˆ˜๊ฐ€ Map์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด
                result.append("0 ");
            }
        }
        
        System.out.println(result.toString().trim());

        sc.close();
    }
}

Map์— key์™€ value๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•ด์„œ ์ €์žฅํ•ด์•ผ ๊ฐฏ์ˆ˜๋ฅผ countํ•  ๋•Œ, ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์„ ์ง€์— ๋Œ€ํ•ด ๋จผ์ € ์ƒ๊ฐํ–ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” ์ƒ๊ทผ์ด์˜ ์นด๋“œ ์ •๋ณด๋ฅผ ๊ทธ๋Œ€๋กœ Map์— ์ €์žฅ์‹œ์ผœ ๊ตฌํ˜„์„ ํ•˜๋ ค ํ–ˆ์—ˆ๋Š”๋ฐ, ์–ด๋–ป๊ฒŒ ํ•˜๋“  ์›ํ•˜๋Š” ์ •์ˆ˜๋ฅผ Map์—์„œ ์ฐพ์„ ๋•Œ Map ์ „์ฒด๋ฅผ ์ˆœํšŒํ•˜๊ฒŒ ๋˜์–ด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ตœ์•…์˜ ๊ฒฝ์šฐ O(N2)O(N^2)๊นŒ์ง€ ๋‚˜์˜ฌ ๊ฑฐ ๊ฐ™์•˜๋‹ค.

๊ทธ๋ž˜์„œ ์ข€ ๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ƒˆ๋‹ค.
๋ฐ”๋กœ, ์ƒ๊ทผ์ด์˜ ์นด๋“œ๋ฅผ ์ž…๋ ฅ ๋ฐ›์„ ๋•Œ, Map์— ํ•ด๋‹น ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ๊ฐฏ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๋‹ค ์ €์žฅ์‹œ์ผœ ๋†“๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ž…๋ ฅํ•œ ์นด๋“œ์˜ ์ˆซ์ž๋ฅผ key๊ฐ’, ๊ฐ™์€ ์ˆซ์ž์˜ ์นด๋“œ ๊ฐฏ์ˆ˜๋ฅผ value๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” Map์„ ์•ž์—์„œ ๋งŒ๋“ค์–ด ๋†“์œผ๋ฉด, ๋’ค์—์„œ ๋”ฐ๋กœ ๊ฐฏ์ˆ˜๋ฅผ ์ผ์ผ์ด ์„ธ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด, ์ƒ๊ทผ์ด์˜ ์นด๋“œ๋ฅผ ์ญ‰ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ,
Map์— ํ•ด๋‹น ์ˆซ์ž์˜ ์นด๋“œ๊ฐ€ ์—†์œผ๋ฉด, value(๊ฐฏ์ˆ˜)๋ฅผ 1๋กœ ์ง€์ •ํ•ด์„œ ์ €์žฅํ•ด์ฃผ๊ณ ,
ํ•ด๋‹น ์ˆซ์ž์˜ ์นด๋“œ๊ฐ€ ์ด๋ฏธ ์žˆ์œผ๋ฉด, ํ•ด๋‹น ์ˆซ์ž๋ฅผ key๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” value(๊ฐฏ์ˆ˜)์— 1์„ ๋”ํ•˜๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค.

์ด ๊ณผ์ •์ด ์™„๋ฃŒ๋˜๋ฉด, ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์นด๋“œ์˜ ์ˆซ์ž๋ฅผ key, ํ•ด๋‹น ์ˆซ์ž์˜ ์นด๋“œ ๊ฐฏ์ˆ˜๋ฅผ value๋กœ ๊ฐ€์ง€๋Š” Map์ด ์™„์„ฑ๋œ๋‹ค.

๋ฌธ์ œ์˜ ์˜ˆ์ œ ์ž…๋ ฅ์„ ์˜ˆ๋กœ ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

์ด์ œ ์ฃผ์–ด์ง„ ์ •์ˆ˜๋“ค์ด ์ƒ๊ทผ์ด์˜ ์นด๋“œ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋Š” ์ง€, ์žˆ๋‹ค๋ฉด ๊ฐฏ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

์ด๋ฏธ ์นด๋“œ๋งˆ๋‹ค์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋‹ค ๊ตฌํ•ด๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์—, Map์— ํฌํ•จ๋˜๋Š” ์ˆซ์ž๋Š” ํ•ด๋‹น value๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋˜๊ณ , ์—†์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ์ตœ์ข…์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐœ์„ ์ 

์กฐ๊ธˆ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์•˜๋‹ค.

์šฐ์„  getOrDefault()๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด, ์กฐ๊ฑด๋ฌธ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

for (int i = 0; i < N; i++) {
	int input = sc.nextInt();
    countMap.put(input, countMap.getOrDefault(input, 0) + 1);
}

์ƒ๊ทผ์ด์˜ ์นด๋“œ๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ value์ธ์ž์— getOrDefault()๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, key๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์ธ 0์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น input์„ key๊ฐ‘์œผ๋กœ ๊ฐ€์ง€๋Š” value๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ์กฐ๊ฑด๋ฌธ์„ ๋”ฐ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

for (int i = 0; i < M; i++) {
	int input = sc.nextInt();
    result.append(countMap.getOrDefault(input, 0)).append(" ");
}

๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ getOrDefault()๋ฅผ ์‚ฌ์šฉํ•ด ์ฃผ๋ฉด, ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ”—๋ฌธ์ œ ๋งํฌ
๐Ÿ’ปRepository

profile
ํ›ˆ์‹น์˜ ๊ฐœ๋ฐœ์—ฌํ–‰

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2024๋…„ 8์›” 4์ผ

์ƒ๊ธ‰๋‹Œใ…ˆ...์•„์ฐจ์ฐจ ๊ฐœ๋ฐœ ๊ณ ์ˆ˜๊ฐ€ ๋˜๋Š” ๊ทธ๋‚ ๊นŒ์ง€...!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ