본문 바로가기
Algorithm/PROGRAMMERS[Java]

Lv1. 신고 결과 받기[카카오]

by 씨니 2022. 5. 2.
728x90

▶ 문제

 

▶ 풀이방법

- HashMap과 Set사용(중복방지)

import java.util.*;
class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
		
		HashMap<String, Set<String>> singo = new HashMap<>(); //각 유저 당 신고한 유저저장
		HashMap<String, Integer> count = new HashMap<>();//각 유저 신고당한 횟수 저장 Map
		
		//각각의 Map초기화
		for(String id : id_list) {
			singo.put(id, new HashSet<String>());
			count.put(id,0);
		}
		
		//신고당한 횟수 Map에 저장.
		for(String r : report) {
			StringTokenizer st = new StringTokenizer(r);
			String s1 = st.nextToken();
			String s2 = st.nextToken();
			
			//만약 중복방지하는 Set에 들어간다면 신고횟수 up(Set에는 같은 값 들어갈 수 없음. -> 이미 신고했음을 파악)
			if(singo.get(s1).add(s2)) {
				count.put(s2, count.get(s2) + 1);
			}
		}
		
		//singo map에서 k번 미만으로 신고된 유저 삭제
		for(String r : report) {
			StringTokenizer st = new StringTokenizer(r);
			String s1 = st.nextToken();
			String s2 = st.nextToken();
			
			if(count.get(s2) < k) {
				singo.get(s1).remove(s2);
			}
		}
		
		//k번 이상으로 신고된 유저들로 저장된 map개수 size로 세어 결과값 배열에 저장
		for(int i = 0; i < id_list.length; i++){
			answer[i] = singo.get(id_list[i]).size();
		}
        return answer;
    }
}

- 내가 푼것 아님,,,,ㅜㅜ 다른사람 풀이 참조

- 참고할 블로그 출처 ( https://devdange.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%8B%A0%EA%B3%A0-%EA%B2%B0%EA%B3%BC-%EB%B0%9B%EA%B8%B0-for-Java-HashMap-%EB%A5%BC-%EC%A0%81%EC%9A%A9%ED%95%9C-%ED%92%80%EC%9D%B4 )

 

-객체지향의 HashMap과 HashSet의 필요성을 알게되었다! 한수 배울 수 있어서 좋았음.

-Map과, Set의 사용법에 대해 다시한번 복습바람.ㅜ

728x90