새소식

알고리즘/문제

[프로그래머스] 신고 결과 받기

  • -

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/92334

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr


public class KAKAO_GetReportResult {
public static void main(String[] args) {
String[] arr1_1 = new String[]{"muzi", "frodo", "apeach", "neo"};
String[] arr1_2 = new String[]{"muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"};
int k_1 = 2;
String[] arr2_1 = new String[]{"con", "ryan"};
String[] arr2_2 = new String[]{"ryan con", "ryan con", "ryan con", "ryan con"};
int k_2 = 3;
System.out.println(Arrays.toString(solution(arr1_1, arr1_2, k_1))); // [2,1,1,0]
System.out.println(Arrays.toString(solution(arr2_1, arr2_2, k_2))); // [0,0]
}
static int[] solution(String[] id_list, String[] report, int k) {
int idSize = id_list.length;
int[] answer = new int[idSize];
HashMap<String, Integer> hm = new HashMap<>(); // hm 은 이름 - 배열인덱스 매핑
ArrayList<HashSet<String>> al = new ArrayList<>(idSize); // al 은 이름에 매칭된 인덱스 - 해당 유저 신고목록(Set)
for(int i=0; i<idSize; i++){
hm.put(id_list[i], i);
al.add(new HashSet<>());
}
StringTokenizer st;
for(int i=0; i<report.length; i++){
st = new StringTokenizer(report[i]);
String mem = st.nextToken();
String target = st.nextToken();
al.get(hm.get(target)).add(mem); // 신고를 당한 사람(target)의 인덱스 위치에 해당하는 Set에 신고자 (mem)목록으로 추가
}
for(int i=0; i<al.size(); i++){
HashSet<String> hs = al.get(i);
if(hs.size() >= k){ // 게시판 정지에 해당하는 신고 횟수를 넘을 경우
hs.forEach(s -> {
answer[hm.get(s)]++; // 그 사람을 신고한 사람의 인덱스로 가서 +1 처리
});
}
}
return answer;
}
}

문제를 읽고나서 풀이는 해당 문제가 말하는 대로 하면 된다고 생각했고

제일 많이 쓴 시간은 데이터들을 담는 자료형들을 정하는 부분이였다

 

입력으로 받는 

id_list 배열 : 사용자 목록

report 배열 : 누가 누굴 신고했는지

k : 게시판 정지 기준 신고 횟수

에 더해서

 

hm 해시맵 : 사용자 이름 - 인덱스 매핑

al 어레이리스트<해시셋> :  어레이리스트 : 사용자 (hm을 사용해 위치 파악 가능)

                                             해시셋 : 사용자를 신고한 사람의 목록

 

으로 세팅하고 문제에서 주어진대로 로직 실행

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.