알고리즘

[해쉬] - Lv1_92334_신고결과 받기

Casteira 2023. 6. 27. 20:09

https://school.programmers.co.kr/learn/courses/30/lessons/92334

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

📌- 풀이

  1. 해쉬맵을 이용해서 String값과 HashSet, index를 초기화
  2. report 배열에서 신고당한 사람 - 신고한 사람으로 map에 값을 추가
  3. 해당 map의 value를 가지고 해당 value의 size가 k보다 크거나 같으면 answer의 배열에 신고한 사람만큼 1씩 증가
  4. answer 출력

Java에서 Hash문제를 많이 풀어보지 않았으면 조금 헷갈릴수도 있는 문제인 것 같다. 카카오 테스트 문제인데 테스트 문제들 중에서는 쉬운편이겠지만 이 문제 또한 그렇게 쉽지만은 않은 문제였던 것 같다. 아직 한참 멀었다는 것이 느껴진다.

 

항상, 꾸준히, 열심히

🔥 - Java 코드

import java.util.*;
class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        HashMap<String,HashSet<String>> map = new HashMap();
        HashMap<String,Integer> idx = new HashMap();
  
        for(int i =0;i<id_list.length;i++){
            map.put(id_list[i],new HashSet());
            idx.put(id_list[i],i);
        }
        
        
        for(int i =0;i<report.length;i++){
            String from = report[i].split(" ")[0];
            String to = report[i].split(" ")[1];
            map.get(to).add(from);
        }
        
        for (int i = 0; i < id_list.length; i++) {
            HashSet<String> send = map.get(id_list[i]);
            
            if(send.size() >= k ){
                for(String s : send){
                    answer[idx.get(s)]++;
                }
            }
        }
    
        return answer;
    }
}