import java.io.*;
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int user_len = id_list.length; //id 개수
int report_len = report.length; // 처리해야할 신고 수
StringTokenizer st;
boolean[][] check = new boolean[user_len][user_len]; // check 2차원배열
for(int i=0; i<report_len; i++){
st = new StringTokenizer(report[i]);
int sinGoza = find_user(id_list, st.nextToken()); //신고자 idx
int sinGoDang = find_user(id_list, st.nextToken()); //신고당한사람 idx
check[sinGoza][sinGoDang] = true; //1번만 신고되므로 boolean으로 체크
}
int[] singo_cnt = new int[user_len];
int[] answer = new int[user_len];
//신고당한 횟수를 세줌
for(int i=0; i<user_len; i++){
for(int j=0; j<user_len; j++){
if(check[i][j]) singo_cnt[j]++;
}
}
//정지 기준 k를 넘긴 유저를 신고한 사람에게 결과를 알려줘야함
for(int i=0; i<user_len; i++){
if(singo_cnt[i] >= k){
for(int j=0; j<user_len; j++){
if(check[j][i]){
answer[j]++;
}
}
}
}
return answer;
}
//user의 idx값을 반환하는 함수
public static int find_user(String[] id_list, String username){
for(int i=0; i<id_list.length; i++){
if(id_list[i].equals(username)) return i;
}
return -1;
}
}
2차원 배열로 풀이를 한 그림

id_list의 길이 : 1,000
시간복잡도 :
1000 x 1000 = 2중 for문 사용
O(N^2)
-> 해쉬맵, Set으로도 풀이 가능
'휴지통 > 알고리즘 & 자료구조' 카테고리의 다른 글
백준 18108 (0) | 2022.03.10 |
---|---|
신규 아이디 추천[Java] (0) | 2022.03.09 |
백준 2231 (0) | 2022.03.07 |
문제해결전략 : BOGGLE (Java) (0) | 2022.03.06 |
백준 1189 (0) | 2022.03.05 |