728x90
난이도 : Lv. 1
풀이일 : 2411015
https://school.programmers.co.kr/learn/courses/30/lessons/92334
문제
아이디어
- id_list의 인덱스를 활용해서 문자열을 숫자처럼 사용하자
- complain 2차원 배열을 만들어, 각 이용자가 신고한 사람의 정보를 저장한다.
- complain 저장 시, count에 신고 당한 사람의 신고 당한 횟수를 저장한다.
- 이용자별로 신고한 사람 중 총 신고 횟수가 k 이상인 사람의 수를 출력한다.
전체 풀이 코드
import java.util.HashMap;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int N = id_list.length;
int[] answer = new int[N];
int[] counts = new int[N];
HashMap<String, Integer> people = new HashMap<String, Integer>();
boolean[][] complain = new boolean[N][N];
// 이름 : 숫자 짝지어주기
for (int i = 0; i < N; i++) {
people.put(id_list[i], i);
}
// 신고 정보 입력 처리
for (int i = 0; i < report.length; i++) {
String[] info = report[i].split(" ");
// 타인에 대한 신고는 한 명당 한 번만 신고 가능
if (complain[people.get(info[0])][people.get(info[1])] == false) {
complain[people.get(info[0])][people.get(info[1])] = true;
counts[people.get(info[1])]++;
}
}
// 내가 신고한 사람이 중지당한 사람인지 확인
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (complain[i][j] == true && counts[j] >= k) {
answer[i]++;
}
}
}
return answer;
}
}
느낀점
- 파이썬으로 풀이하고 바로 자바로 다시 풀이하면서 달라진 것들이 좀 있다.
- 파이썬에서는 id_list에서 index메소드를 사용했는데, 자바에서는 그런건 할 줄 몰라서, HashMap을 만들어서 모든 이름을 숫자처럼 사용할 수 있도록 이름과 숫자를 짝지어 넣어줬다.
- 또, 배열의 크기를 지정해줘야 하니까, boolean 2차원 배열을 만들어 내가 신고한 사람의 정보를 기억할 수 있도록 했다. 처음에는 boolean인데 기본 세팅이 null이라 당황했는데, 내가 Boolean[][] 해놔서 그런거였다. 이런 실수 화남
'알고리즘 > Lv. 1' 카테고리의 다른 글
프로그래머스 92334 신고 결과 받기 파이썬 풀이 (0) | 2024.11.01 |
---|---|
프로그래머스 250137 붕대감기 파이썬 풀이 (1) | 2024.10.30 |
프로그래머스 258712 가장 많이 받은 선물 파이썬 풀이 (0) | 2024.10.29 |
프로그래머스 131112 강원도에 위치한 생산공장 목록 출력하기 SQL 풀이 (1) | 2024.09.24 |
프로그래머스 59407 이름이 있는 동물의 아이디 SQL 풀이 (0) | 2024.09.22 |