Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 문자열
- 인텔리제이
- bfs
- 구름LEVEL
- 이직
- 스타트업
- 스프링 부트
- docker
- 구현
- 해결
- dfs
- 스프링
- 코딩테스트
- spring
- 프로그래머스
- 백엔드
- 자료구조
- IntelliJ
- 주니어
- 도커
- 개발자
- Java
- 배열
- 스프링부트
- Linux
- 명령어
- HTTP
- spring boot
- 해시맵
- HashMap
Archives
- Today
- Total
마이의 개발 블로그
[프로그래머스] 신고 결과 받기 (Java) 본문
반응형
작성 코드
1. 한 유저당 한 사람에 대해 1회만 신고가 유효하므로 report 중복값을 제거한 후 reportList에 저장한다.
2. reportList를 읽어 신고자와 신고당한자의 이름을 각각 reportArray[i][0], reportArray[i][1]에 저장한다.
3. reportArray를 돌며 각 유저가 신고당한 횟수를 reportCount배열에 저장한다.
4. 정지 당한 유저 (2회 이상)를 체크한 후, 각 신고자가 받을 처리 결과 메일의 수를 체크하여 배열로 저장한다.
//몇몇 케이스 시간초과
import java.util.*;
import java.lang.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = {};
//report 중복값 제거 (한 유저당 1회 신고 가능)
for(int i=0; i<report.length-1; i++){
for(int j=i+1; j<report.length; j++)
if(report[i].equals(report[j])){
report[j] = "";
}
}
List<String> reportList = new ArrayList<String>();
//null값을 제외한 report 내용 리스트에 저장
for(int i=0; i<report.length; i++){
if(report[i]!=""){
reportList.add(report[i]);
}
}
String[][] reportArray = new String[reportList.size()][2];
//report 배열로부터 신고자, 신고당한자 분리하여 배열로 저장
for(int i=0; i<reportArray.length; i++){
StringTokenizer st = new StringTokenizer(reportList.get(i));
reportArray[i][0] = st.nextToken();
reportArray[i][1] = st.nextToken();
}
//신고횟수를 카운트하기위한 배열 선언 (0으로 시작)
int[] reportCount = new int[id_list.length];
Arrays.fill(reportCount, 0);
//신고당한 횟수 카운트하기
for(int i=0; i<reportArray.length; i++){
for(int j=0; j<id_list.length; j++){
if(id_list[j].equals(reportArray[i][1])){
reportCount[j]++;
}
}
}
//정지당한 유저 저장 목록
List<String> suspendedList = new ArrayList<String>();
//카운트가 2가 넘어가는 유저(정지당한 유저)를 신고한 유저들의 id 정보 저장
for(int i=0; i<reportCount.length; i++){
if(reportCount[i] >= k){
for(int j=0; j<reportArray.length; j++){
if(id_list[i].equals(reportArray[j][1])){
suspendedList.add(reportArray[j][0]);
}
}
}
}
//답변 배열 초기화
answer = new int[id_list.length];
Arrays.fill(answer, 0);
for(int i=0; i<suspendedList.size(); i++){
String user = suspendedList.get(i);
for(int j=0; j<id_list.length; j++){
if(user.equals(id_list[j])){
answer[j]++;
}
}
}
return answer;
}
}
논리는 맞는 것 같은데, 몇몇 케이스에서 시간초과가 나서 아직 고민 중에 있음
Note
프로그래머스 연습 문제들 중 카카오 문제들은 레벨1이라도 문제 읽고 푸는 데에 시간이 꽤 걸린다. 효율적인 자료구조와 알고리즘의 적용을 위한 연습이 많이 필요함을 느낀다.
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 전화번호 목록 (Java) (0) | 2023.01.20 |
---|---|
[프로그래머스] 크레인 인형뽑기 게임 (Java) (0) | 2022.03.08 |
[프로그래머스] 폰켓몬 (Java) (0) | 2022.03.05 |
[프로그래머스] 기능개발 (Java) (0) | 2022.03.03 |
[프로그래머스] 피보나치 수 (Java) (0) | 2022.03.03 |
Comments