[프로그래머스 - JS] LV.1 신고 결과 받기
♟ 풀이 순서
id_list = 모든 이용자 ID (arr)
report = 신고한 이용자의 ID와 신고당한 이용자의 ID (arr)
k = 신고 횟수
- 정답을 적을 길이id_list인 빈배열 생성
- 신고당한 유저와 신고횟수를 객체로 나타내기
- 중복신고 제거 (같은값들 제거) -> Set()
- report의 오른쪽에 정지 먹은 유저의 ID의 수 새기 -> 신고받은 유저ID 객체로 만들기(blackList)
- 정지먹은 유저의 ID를 신고한 사람에게 +1씩
- report의 오른쪽에 BlackList유저가 있으면
👾 코드
const solution = (id_list, report, k) => {
// 1. 정답을 적을 길이id_list인 빈배열 생성
let answer = new Array(id_list.length).fill(0);
const blackList = {};
// 2. 신고당한 유저와 신고횟수를 객체로 나타내기
Array.from(new Set(report)).forEach((id) => {
blackList[id.split(" ")[1]] = (blackList[id.split(" ")[1]] || 0) + 1;
});
// 3. 정지먹은 유저의 ID를 신고한 사람에게 +1씩
Array.from(new Set(report)).forEach((id) => {
if (blackList[id.split(" ")[1]] >= k) {
answer[id_list.indexOf(id.split(" ")[0])]++;
}
});
return answer;
};
👀 코드 비교
- 다른 코드를 보니 나보다 시간복잡도가 더 적었다. 다른 분의 시간 복잡도는 4n 이였다.
비교해보니 3번에서 차이가 났다.
나는 forEach문 안에서 indexOf로 배열에 넣어주었는데 다른분의 코드에서는 “블랙리스트에서 k이상신고받은 사람을 신고한 사람” 에 대한 객체를 한 번 더 만들어주고 그 사람들이 받은 메일을 answer에 받아서 return 해주었다.
☕ 잡담
- 계속 코드길이만 짧게하려고 했는데 연산속도에 신경을 써야할 것 같다.
Leave a comment