05-15 08:39
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[Programmers] 2022 KAKAO BLIND RECRUITMENT : ์‹ ๊ณ  ๊ฒฐ๊ณผ ๋ฐ›๊ธฐ JAVA ๋ณธ๋ฌธ

Algorithm/Programmers

[Programmers] 2022 KAKAO BLIND RECRUITMENT : ์‹ ๊ณ  ๊ฒฐ๊ณผ ๋ฐ›๊ธฐ JAVA

miinsun 2022. 6. 17. 02:27

 

๐Ÿ’ฌ ๋ฌธ์ œ ์„ค๋ช…

์‹ ์ž…์‚ฌ์› ๋ฌด์ง€๋Š” ๊ฒŒ์‹œํŒ ๋ถˆ๋Ÿ‰ ์ด์šฉ์ž๋ฅผ ์‹ ๊ณ ํ•˜๊ณ  ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”์ผ๋กœ ๋ฐœ์†กํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด์ง€๊ฐ€ ๊ฐœ๋ฐœํ•˜๋ ค๋Š” ์‹œ์Šคํ…œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1) ๊ฐ ์œ ์ €๋Š” ํ•œ ๋ฒˆ์— ํ•œ ๋ช…์˜ ์œ ์ €๋ฅผ ์‹ ๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  - ์‹ ๊ณ  ํšŸ์ˆ˜์— ์ œํ•œ์€ ์—†์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์œ ์ €๋ฅผ ๊ณ„์†ํ•ด์„œ ์‹ ๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  - ํ•œ ์œ ์ €๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹ ๊ณ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๋™์ผํ•œ ์œ ์ €์— ๋Œ€ํ•œ ์‹ ๊ณ  ํšŸ์ˆ˜๋Š” 1ํšŒ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
2) k๋ฒˆ ์ด์ƒ ์‹ ๊ณ ๋œ ์œ ์ €๋Š” ๊ฒŒ์‹œํŒ ์ด์šฉ์ด ์ •์ง€๋˜๋ฉฐ, ํ•ด๋‹น ์œ ์ €๋ฅผ ์‹ ๊ณ ํ•œ ๋ชจ๋“  ์œ ์ €์—๊ฒŒ ์ •์ง€ ์‚ฌ์‹ค์„ ๋ฉ”์ผ๋กœ ๋ฐœ์†กํ•ฉ๋‹ˆ๋‹ค.
  - ์œ ์ €๊ฐ€ ์‹ ๊ณ ํ•œ ๋ชจ๋“  ๋‚ด์šฉ์„ ์ทจํ•ฉํ•˜์—ฌ ๋งˆ์ง€๋ง‰์— ํ•œ๊บผ๋ฒˆ์— ๊ฒŒ์‹œํŒ ์ด์šฉ ์ •์ง€๋ฅผ ์‹œํ‚ค๋ฉด์„œ ์ •์ง€ ๋ฉ”์ผ์„ ๋ฐœ์†กํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ „์ฒด ์œ ์ € ๋ชฉ๋ก์ด ["muzi", "frodo", "apeach", "neo"]์ด๊ณ , k = 2(์ฆ‰, 2๋ฒˆ ์ด์ƒ ์‹ ๊ณ ๋‹นํ•˜๋ฉด ์ด์šฉ ์ •์ง€)์ธ ๊ฒฝ์šฐ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
๊ฐ ์œ ์ €๋ณ„๋กœ ์‹ ๊ณ ๋‹นํ•œ ํšŸ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์œ„ ์˜ˆ์‹œ์—์„œ๋Š” 2๋ฒˆ ์ด์ƒ ์‹ ๊ณ ๋‹นํ•œ "frodo"์™€ "neo"์˜ ๊ฒŒ์‹œํŒ ์ด์šฉ์ด ์ •์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ๊ฐ ์œ ์ €๋ณ„๋กœ ์‹ ๊ณ ํ•œ ์•„์ด๋””์™€ ์ •์ง€๋œ ์•„์ด๋””๋ฅผ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ "muzi"๋Š” ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ”์ผ์„ 2ํšŒ, "frodo"์™€ "apeach"๋Š” ๊ฐ๊ฐ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ”์ผ์„ 1ํšŒ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด์šฉ์ž์˜ ID๊ฐ€ ๋‹ด๊ธด ๋ฌธ์ž์—ด ๋ฐฐ์—ด id_list, ๊ฐ ์ด์šฉ์ž๊ฐ€ ์‹ ๊ณ ํ•œ ์ด์šฉ์ž์˜ ID ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋ฌธ์ž์—ด ๋ฐฐ์—ด report, ์ •์ง€ ๊ธฐ์ค€์ด ๋˜๋Š” ์‹ ๊ณ  ํšŸ์ˆ˜ k๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ ์œ ์ €๋ณ„๋กœ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ”์ผ์„ ๋ฐ›์€ ํšŸ์ˆ˜๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

๐Ÿšซ ์ œํ•œ ์‚ฌํ•ญ

  • 2 ≤ id_list์˜ ๊ธธ์ด ≤ 1,000
    • 1 ≤ id_list์˜ ์›์†Œ ๊ธธ์ด ≤ 10
    • id_list์˜ ์›์†Œ๋Š” ์ด์šฉ์ž์˜ id๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์ด๋ฉฐ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    • id_list์—๋Š” ๊ฐ™์€ ์•„์ด๋””๊ฐ€ ์ค‘๋ณตํ•ด์„œ ๋“ค์–ด์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 1 ≤ report์˜ ๊ธธ์ด ≤ 200,000
    • 3 ≤ report์˜ ์›์†Œ ๊ธธ์ด ≤ 21
    • report์˜ ์›์†Œ๋Š” "์ด์šฉ์žid ์‹ ๊ณ ํ•œid"ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด "muzi frodo"์˜ ๊ฒฝ์šฐ "muzi"๊ฐ€ "frodo"๋ฅผ ์‹ ๊ณ ํ–ˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
    • id๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด์šฉ์žid์™€ ์‹ ๊ณ ํ•œid๋Š” ๊ณต๋ฐฑ(์ŠคํŽ˜์ด์Šค)ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ž๊ธฐ ์ž์‹ ์„ ์‹ ๊ณ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • 1 ≤ k ≤ 200, k๋Š” ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • return ํ•˜๋Š” ๋ฐฐ์—ด์€ id_list์— ๋‹ด๊ธด id ์ˆœ์„œ๋Œ€๋กœ ๊ฐ ์œ ์ €๊ฐ€ ๋ฐ›์€ ๊ฒฐ๊ณผ ๋ฉ”์ผ ์ˆ˜๋ฅผ ๋‹ด์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”จ ์ž…์ถœ๋ ฅ ์˜ˆ

  1. ์ž…์ถœ๋ ฅ ์˜ˆ #1
    • ๋ฌธ์ œ์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  2. ์ž…์ถœ๋ ฅ ์˜ˆ #2
    • "ryan"์ด "con"์„ 4๋ฒˆ ์‹ ๊ณ ํ–ˆ์œผ๋‚˜, ์ฃผ์–ด์ง„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ํ•œ ์œ ์ €๊ฐ€ ๊ฐ™์€ ์œ ์ €๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹ ๊ณ ํ•œ ๊ฒฝ์šฐ๋Š” ์‹ ๊ณ  ํšŸ์ˆ˜ 1ํšŒ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "con"์€ 1ํšŒ ์‹ ๊ณ ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค. 3๋ฒˆ ์ด์ƒ ์‹ ๊ณ ๋‹นํ•œ ์ด์šฉ์ž๋Š” ์—†์œผ๋ฉฐ, "con"๊ณผ "ryan"์€ ๊ฒฐ๊ณผ ๋ฉ”์ผ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ [0, 0]์„ return ํ•ฉ๋‹ˆ๋‹ค.

โ€‹

๐Ÿ’ป Solution.java

๋จผ์ €, ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ํ’€์–ด๋ณด๋„๋ก ํ•˜์ž. 

1. ์‹ ๊ณ ์ž์™€ ์‹ ๊ณ  ๋‹นํ•œ ์‚ฌ๋žŒ๋“ค์˜ ์ •๋ณด๋ฅผ ๊ฐ๊ฐ ์ €์žฅํ•œ๋‹ค . (์‹ ๊ณ  map)

  • ๊ธฐ์กด hashMap์€ ์ €์žฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ๋˜์ง€์•Š๊ธฐ ๋•Œ๋ฌธ์— LinkedHashMap์„ ์ด์šฉํ•ด ID์ˆœ์œผ๋กœ ์‹ ๊ณ ์ž, ์‹ ๊ณ ๋‹นํ•œ ์‚ฌ๋žŒ๋“ค์˜ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋„๋ก ํ–ˆ๋‹ค.
  • ์ด๋ฏธ (์‹ ๊ณ ์ž, ์‹ ๊ณ ๋‹นํ•œ์‚ฌ๋žŒ)์˜ ์กฐํ•ฉ์ด ์ค‘๋ณต๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๋ฉด List์— ํฌํ•ฉ๋˜์ง€ ์•Š๋„๋กํ•ด์•ผํ•œ๋‹ค.
reporter reported
muzi frodo, neo
frodo neo
apeach frodo, muzi
neo  

2. ์ •์ง€ ๊ธฐ์ค€์„ ๋„˜์€ ์‚ฌ๋žŒ๋“ค์€ ์ •์ง€๋œ๋‹ค. (์‹ ๊ณ  ํšŸ์ˆ˜ map)

  • ํšŒ์›์˜ ID๋ณ„๋กœ ์‹ ๊ณ  ๋‹นํ•œ ํšŸ์ˆ˜๋ฅผ ๊ธฐ๋กํ•ด์ค€๋‹ค.
  • ์ด๋•Œ ๊ธฐ๋ก ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ HashMap<String, Integer>์— ์‹ ๊ณ  ํšŸ์ˆ˜๋ฅผ ๊ธฐ๋กํ•ด์ค€๋‹ค.
reported cnt
muzi 1
frodo 2
apeach 0
neo 2

3. ์‹ ๊ณ ์ž๋“ค์—๊ฒŒ ๋ฉ”์ผ์„ ๋ณด๋‚ธ๋‹ค.

  • ์‹ ๊ณ Map์„ ๋Œ๋ฉด์„œ ๋ณธ์ธ์ด ์‹ ๊ณ ํ•œ ์‚ฌ๋žŒ๋“ค ์ค‘์— ์ •์ง€ ๊ธฐ์ค€์„ ๋„˜์€ ์‚ฌ๋žŒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  • ๋งŒ์•ฝ, ์ •์ง€๋œ ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์นด์šดํŠธ ํ•ด์ค€ ๋’ค, answer[]๋ฐฐ์—ด์— ๊ธฐ๋กํ•œ๋‹ค.
import java.util.*;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        // ๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ๋ฅผ ์‹ ๊ณ ํ–ˆ๋Š”์ง€ ์ €์žฅ ex) muzi(์‹ ๊ณ ์ž) - frodo, neo(์‹ ๊ณ  ๋‹นํ•œ์ž)
        LinkedHashMap<String, ArrayList<String>> map = new LinkedHashMap<>();
        // ๋ˆ„๊ฐ€ ๋ช‡๋ฒˆ ์‹ ๊ณ ๋ฅผ ๋‹นํ–ˆ๋Š”์ง€ ์ €์žฅ ex) muzi - 1 (muzi๊ฐ€ 1๋ฒˆ ์‹ ๊ณ ๋‹นํ•จ)
        HashMap<String, Integer> reports = new HashMap<>();
        
        for(String id : id_list){
            map.put(id, new ArrayList<String>());
        }
        
        for(String s : report){
            StringTokenizer st = new StringTokenizer(s);
            String reporter = st.nextToken();
            String reported = st.nextToken();
            
            ArrayList<String> tmp = map.get(reporter);
            // ์‹ ๊ณ ํ•œ ์‚ฌ๋žŒ๊ณผ ์‹ ๊ณ  ๋‹นํ•œ ์‚ฌ๋žŒ ์ •๋ณด ์ €์žฅ
            if(!tmp.contains(reported)){    // ์‹ ๊ณ  ์ค‘๋ณต ๊ฒ€์‚ฌ
                tmp.add(reported);
                map.put(reporter, tmp);
                // ์‹ ๊ณ ๋‹นํ•œ ์‚ฌ๋žŒ ํšŸ์ˆ˜ ๋ˆ„์ ํ•˜๊ธฐ
                reports.put(reported, reports.getOrDefault(reported, 0) + 1);
            }
        }
        
        // ๋ฉ”์ผ ๋ฐ›์„ ํšŸ์ˆ˜ ์ €์žฅ
        int[] answer = new int[id_list.length];
        int i = 0;
        for(String s : map.keySet()){
            // ๋ณธ์ธ์ด ์‹ ๊ณ ํ•œ ์‚ฌ๋žŒ ๋ฆฌ์ŠคํŠธ
            ArrayList<String> tmp = map.get(s);
            
            int cnt = 0;
            for(String reported : tmp){
                // ์‹ ๊ณ ํ•œ ์‚ฌ๋žŒ๋“ค ์ค‘, ์ •์ง€ ๊ธฐ์ค€์„ ๋„˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์นด์šดํŠธ
                if(reports.get(reported) >= k){
                    cnt++;
                }
            }
            
            answer[i++] = cnt;
        }
        
        return answer;
    }
}
Comments