๐Ÿ‘ฉ๐Ÿป‍๐ŸŒพ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java] ์‹ ๊ณ  ๊ฒฐ๊ณผ ๋ฐ›๊ธฐ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Java] ์‹ ๊ณ  ๊ฒฐ๊ณผ ๋ฐ›๊ธฐ

์ฅฌ์Šค์ด 2024. 1. 22. 23:13
728x90
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

2022 KAKAO BLIND RECRUITMENT์—์„œ LV.1์œผ๋กœ ์ถœ์ œ๋œ ๋ฌธ์ œ์ด๋‹ค. 

2024 KAKAO WINTER INTERNSHIP ์ฝ”ํ…Œ๋ฅผ ๋ด๋ณธ 1์ธ์œผ๋กœ์„œ ์นด์นด์˜ค๋Š” HashMap์„ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ข‹์•„ํ•˜๋Š” ๋“ฏ

 

HaspMap์—์„œ ํ™œ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์„ ์ •๋ฆฌํ•˜๊ธฐ ์ข‹์€ ๋ฌธ์ œ์ธ ๊ฑฐ ๊ฐ™์•„์„œ ์ฝ”๋“œ๋ธ”๋Ÿญ๋ณ„๋กœ ์ž์„ธํžˆ ์„ค๋ช…์„ ์ ์–ด๋‘๋ ค๊ณ  ํ•œ๋‹ค:)

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์ „์ฒด ์ฝ”๋“œ๋Š” ์šฐ์„  ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        
        HashSet<String> blockUser = new HashSet<>();           	     // ์ด์šฉ ๊ธˆ์ง€ ๋‹นํ•œ ์œ ์ €
        Map<String, HashSet<String>> reportInfo = new HashMap<>();   // ์œ ์ €๋ณ„ ์‹ ๊ณ ํ•œ ์œ ์ € ๋ชจ์Œ
        Map<String, Integer> getReported = new HashMap<>();          // ์œ ์ €๋ณ„ ์‹ ๊ณ  ๋‹นํ•œ ์ˆ˜

        for (int i = 0; i < report.length; i++) {
            String[] ppl = report[i].split(" ");

            if (!reportInfo.containsKey(ppl[0]))
                reportInfo.put(ppl[0], new HashSet<>());
            reportInfo.get(ppl[0]).add(ppl[1]);
        }

        for (Map.Entry<String, HashSet<String>> map : reportInfo.entrySet()) {
       	    // ๊ฐ’ ์ œ๋Œ€๋กœ ๋“ค์–ด๊ฐ”๋Š”์ง€ ํ™•์ธ
            // System.out.println(map.getKey() + " : " + map.getValue());
            
            for (String str : map.getValue()) {
                getReported.put(str, getReported.getOrDefault(str, 0) + 1);
                if (getReported.get(str) >= k)
                    blockUser.add(str);
            }
        }

        for (int i = 0; i < id_list.length; i++) {
            String name = id_list[i];
            HashSet<String> values = reportInfo.get(name);

            if (values != null) {
                for (String str : blockUser) {
                    if (values.contains(str))
                        answer[i] += 1;
                }
            }
        }
        return answer;
    }
}

๐Ÿ’ก ์ฝ”๋“œ๋ธ”๋Ÿญ ์„ค๋ช…

for (int i = 0; i < report.length; i++) {
    String[] ppl = report[i].split(" ");
    
    if (!reportInfo.containsKey(ppl[0]))
        reportInfo.put(ppl[0], new HashSet<>());
    reportInfo.get(ppl[0]).add(ppl[1]);
}

report ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๊ฐ’์„ ๊ณต๋ฐฑ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ HashMap ๊ฐ์ฒด์ธ reportInfo์— ์‹ ๊ณ ํ•œ ์œ ์ €(=ppl[0])๋ฅผ key๊ฐ’์œผ๋กœ, ์‹ ๊ณ ๋‹นํ•œ ์œ ์ €(=ppl[1])๋ฅผ value๊ฐ’์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

์ด๋•Œ, ํ•œ๋ฒˆ๋„ ์ €์žฅ ์•ˆ ๋œ ์œ ์ €๋ผ๋ฉด reportInfo์— Map ๊ฐ์ฒด๋ฅผ ๋จผ์ € ๋งŒ๋“ค์–ด์ค€ ๋’ค value์— ๊ฐ’์„ ์ €์žฅํ•ด์ค€๋‹ค.

for (Map.Entry<String, HashSet<String>> map : reportInfo.entrySet()) {
    // ๊ฐ’ ์ œ๋Œ€๋กœ ๋“ค์–ด๊ฐ”๋Š”์ง€ ํ™•์ธ
    // System.out.println(map.getKey() + " : " + map.getValue());
            
    for (String str : map.getValue()) {
    	getReported.put(str, getReported.getOrDefault(str, 0) + 1);
        if (getReported.get(str) >= k)
        	blockUser.add(str);
    }
}

Map.Entry๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Map์— ์ €์žฅ๋œ ๋ชจ๋“  key-value์Œ์„ key-value๋ฅผ ๊ฐ–๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. -> Map์˜ ๊ฐ ํ•ญ๋ชฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ž˜์„œ Map์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ํ•œ๋ฒˆ์”ฉ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ํ•ด๋‹น ๊ฐ์ฒด์˜ value์— ์ €์žฅ๋œ ์‹ ๊ณ  ๋‹นํ•œ ์œ ์ €์˜ ์‹ ๊ณ  ๋‹นํ•œ ํšŸ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ค€๋‹ค.

Map.Entry ๋ฉ”์†Œ๋“œ
- getKey()
   Map.Entry ๊ฐ์ฒด์˜ key๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
- getValue()
   Map.Entry ๊ฐ์ฒด์˜ value๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
for (int i = 0; i < id_list.length; i++) {
    String name = id_list[i];
    HashSet<String> values = reportInfo.get(name);
    
    if (values != null) {
    	for (String str : blockUser) {
        	if (values.contains(str))
            	answer[i] += 1;
 	}
    }
}

์ด์ œ id_list์— ์ €์žฅ๋œ ์•„์ด๋”” ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ”์ผ์„ ๋ฐ›์€ ํšŸ์ˆ˜๋ฅผ answer ๋ฐฐ์—ด์— ์ €์žฅ์„ ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— id_list์— ๋‹ด๊ธด ์ˆœ์„œ๋Œ€๋กœ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค.

 

๋ณธ์ธ์ด ์‹ ๊ณ ํ•œ ์œ ์ €์˜ ์•„์ด๋””๋ฅผ values์— ๋‹ด๊ณ , ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ์‹ ๊ณ ํ•œ ๊ธฐ๋ก์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ๋ณธ์ธ์ด ์‹ ๊ณ ํ•œ ์•„์ด๋””๊ฐ€ ์ •์ง€๋œ ์•„์ด๋””์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ์„ ํ•ด์ค€๋‹ค.

 

๋งŒ์•ฝ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ, ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ”์ผ์„ ๋ฐ›์œผ๋ฏ€๋กœ answer[i]์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค.

728x90
Comments