본문 바로가기
코딩테스트/프로그래머스

[2022 KAKAO BLIND RECRUITMENT] 신고 결과 받기

by 의정부핵꿀밤 2022. 9. 6.
728x90

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

 

프로그래머스

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

programmers.co.kr


중복 신고를 제거하기 위해서 HashMap과 HashSet을 이용했다

 

  • Set : 데이터 중복 저장이 불가능하고, 입력 순서대로의 저장 순서를 보장할 수 없는 자료구조
  • HashSet : Set 인터페이스를 구현한 자료구조로, 순서가 필요없는 데이터를 hash table에 저장한다. Set 중에서 가장 성능이 좋고 put() 메소드를 사용해 데이터를 넣는다
  • HashMap : Map 인터페이스를 구현한 자료구조로, key-value 형식의 데이터를 저장한다. 중복된 key 값을 허용하지 않는다

 

Map<String, HashSet<String>> reportMap = new HashMap<>();

  • [신고된 ID, [신고한 ID 들]] 로 구성된 HashMap
  • key는 신고된 ID, value는 중복 허용을 하지 않는 HashSet 사용 (한 사람이 같은 사람을 여러 번 신고하는 경우를 제외하기 위함)


Map<String, Integer> answerMap = new HashMap<>();

  • [신고된 ID, 메일 수] 로 구성된 HashMap
  • 이를 int[] 로 변환하여 answer에 저장한다

 

 

 

자바 코드)

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

class Solution {
    public int[] solution(String[] id_list, String[] report, int k) {
        int[] answer = new int[id_list.length];
        Map<String, HashSet<String>> reportMap = new HashMap<>();
        Map<String, Integer> answerMap = new HashMap<>();

        for (int i = 0; i < id_list.length; i++) { // 초기화
            HashSet<String> reportingId = new HashSet<>();
            reportMap.put(id_list[i], reportingId);
            answerMap.put(id_list[i], 0);
        }

        // 신고 기록 세팅
        for (String r : report) {
            String[] reportStr = r.split(" ");
            reportMap.get(reportStr[1]).add(reportStr[0]);
        }

        // 유저 별 신고 결과 메일 세팅
        for (String reportUser : reportMap.keySet()) {
            HashSet<String> user = reportMap.get(reportUser);
            if (user.size() >= k) {
                for (String userId : user) {
                    answerMap.put(userId, answerMap.get(userId) + 1);
                }
            }
        }
        
        for(int i=0;i< id_list.length;i++) {
            answer[i] = answerMap.get(id_list[i]);
        }
        return answer;
    }
}

 

 

 


참고)

https://eunoia3jy.tistory.com/166

 

[ 프로그래머스 ] 신고 결과 받기(Java) - 2022 KAKAO BLIND RECRUITMENT

프로그래머스 에서 코딩테스트 문제 신고 결과 받기 를 풀어봤습니당~ 1단계입니당! https://programmers.co.kr/learn/courses/30/lessons/92334?language=java 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입..

eunoia3jy.tistory.com

 

728x90

댓글