프로그래머스 코딩테스트 연습의 문제입니다.
https://programmers.co.kr/learn/courses/30/lessons/92334
코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr
문제 자체는 간단한 시뮬레이션입니다.
주의해야할 점은 신고를 당한 이용자가 아닌 신고자에게 결과를 보내야한다는 점,
그리고 같은 신고를 여러번 하는 경우를 예외처리해 하나로 카운팅 해야 한다는 점 입니다.
저는 HashMap 자료구조를 활용해 이용자의 id를 Integer로 연결시키고,
같은 크기의 배열을 활용해 신고 기록을 저장, 활용했습니다.
이용자의 전체 크기가 최대 1000명이기 때문에 해당 2차원 배열의 크기는 1000x1000으로 코딩테스트에서 사용하기에 큰 무리가 없다고 생각했습니다.
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class q92334_Programmers_신고결과받기 {
static String[] id_list = { "muzi", "frodo", "apeach", "neo" };
static String[] report = { "muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi" };
static int k = 2;
public static void main(String[] args) {
int user = id_list.length;
boolean[][] log = new boolean[user][user];
int[] count = new int[user];
int[] answer = new int[user];
Map<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < id_list.length; i++) {
map.put(id_list[i], i);
}
for (int i = 0; i < report.length; i++) {
StringTokenizer st = new StringTokenizer(report[i]);
int reporter = map.get(st.nextToken());
int target = map.get(st.nextToken());
if (!log[reporter][target]) {
log[reporter][target] = true;
count[target]++;
}
}
for(int i = 0; i < id_list.length; i++) {
if(count[i] >= k) {
for(int j = 0; j < id_list.length; j++) {
if(log[j][i]) {
answer[j]++;
}
}
}
}
System.out.println(Arrays.toString(answer));
}
}
728x90
'🔍 알고리즘 > 프로그래머스 Java' 카테고리의 다른 글
[Java] 백준 23559번. 밥 (실버1) (0) | 2022.06.29 |
---|---|
[Java] 프로그래머스 64064.불량사용자 (Lv.3) (0) | 2022.06.17 |
[Java] 프로그래머스 60057.문자열압축 (Lv.2) (0) | 2022.06.03 |
[Java] 프로그래머스 42888.오픈채팅방 (Lv.2) (0) | 2022.06.03 |
[JAVA] 프로그래머스 77484.로또의 최고 순위와 최저 순위 (Lv.1) (0) | 2022.05.26 |