728x90
코드 힌트
저는 Set을 사용하지 않고 boolean[][] 을 사용하여 중복을 제거했습니다. 만약 Set으로 제거하는 것을 원하시는 분은 다른 글을 참고하시는 것을 추천합니다.
- ID와 인덱스 매핑하기(HashMap<String,Integer> <이름, index>)
- 사용자 ID 목록을 기반으로, 각 사용자의 ID와 해당 인덱스를 연결합니다. 이렇게 하면 신고 내역을 처리할 때, 사용자 이름 대신 인덱스를 사용해 작업할 수 있어 효율적입니다.
- 중복 신고 방지(boolean[][] : [신고한 사람 index][신고당한 사람 index])
- 신고 내역을 처리할 때, 동일한 사용자가 같은 사람을 여러 번 신고하는 경우, 중복 신고를 피하기 위해 신고가 이미 처리된 적이 있는지 확인합니다.
- 중복 신고를 방지하는 배열을 사용하여, 만약 이전에 신고된 적이 없다면 신고 횟수를 증가시킵니다.
- 신고 횟수 세기(int[] 사용 매핑된 인덱스로 주소 추적)
- 각 사용자가 받은 신고 횟수를 기록합니다. 사용자가 신고된 횟수가 특정 기준(예: k회) 이상일 때, 그 사용자를 신고한 사람들에게 알림을 보내야 합니다.
- 결과 계산
- 각 사용자가 신고한 다른 사용자들의 신고 횟수를 확인합니다. 만약 신고된 사용자의 신고 횟수가 기준 이상이라면, 그 사용자를 신고한 사람에게 알림을 보낼 수 있는 횟수를 기록합니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
// id_list 배열의 길이를 n으로 정의 (사용자 수)
int n = id_list.length;
// 최종 결과를 저장할 배열, 모든 요소를 0으로 초기화
int[] result = new int[n];
// 사용자가 신고한 내역을 기록할 2차원 boolean 배열
boolean[][] hasReported = new boolean[n][n];
// 각 사용자가 받은 신고 횟수를 기록할 배열
int[] reportCounts = new int[n];
// 사용자 ID를 인덱스와 매핑하기 위해 HashMap 사용
HashMap<String, Integer> userIndexMap = new HashMap<>();
// id_list 배열을 순회하여 각 사용자 ID에 대해 인덱스를 매핑
for (int i = 0; i < n; i++) {
userIndexMap.put(id_list[i], i);
}
// report 배열을 순회하여 신고 내역을 처리
for (int i = 0; i < report.length; i++) {
// 신고 내용을 공백으로 분리하여 신고자와 피신고자 추출
String[] reportDetails = report[i].split(" ");
int reporterIndex = userIndexMap.get(reportDetails[0]);
int reportedIndex = userIndexMap.get(reportDetails[1]);
// 동일한 신고는 한 번만 처리되도록 중복 신고 방지
if (!hasReported[reporterIndex][reportedIndex]) {
reportCounts[reportedIndex] += 1;
hasReported[reporterIndex][reportedIndex] = true;
}
}
// 각 사용자가 신고한 피신고자의 신고 횟수가 k 이상인 경우 결과 카운트 증가
for (int i = 0; i < n; i++) {
int validReportCount = 0;
for (int j = 0; j < n; j++) {
if (hasReported[i][j] && reportCounts[j] >= k) {
validReportCount++;
}
}
result[i] = validReportCount;
}
return result;
}
}
728x90
'프로그래머스(Java) > Level 1' 카테고리의 다른 글
[프로그래머스] [1차] 다트 게임 (1) | 2024.08.20 |
---|---|
[프로그래머스] 문자열 나누기 (0) | 2024.08.16 |
[프로그래머스] 둘만의 암호 (0) | 2024.08.06 |
[프로그래머스] [PCCE 기출문제] 9번 / 이웃한 칸 (0) | 2024.08.06 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2024.08.05 |