-
JS에서 항상 찾아오는 시간초과...중복 제거 기능 사용하기 [...new Set()]Code Etc/코딩테스트 2022. 12. 7. 16:45반응형
프로그래머스에서 신고 결과를 받는 문제였다.
간략하게 설명하자면 다른 유저를 신고할 수 있고, 같은 유저를 신고해도 횟수는 1회만 적용된다.
그리고 k횟수가 넘어가면 해당 유저는 정지되고 해당 유저를 신고한 유저는 신고완료 메일을 받는다.
function solution(id_list, report, k) {
let details = []
for(let i = 0 ; i < id_list.length ; i++) {
details.push({name : id_list[i], report : [], getMails : 0, count : 0})
}
const filteredReport = [];
report.forEach((e) => {
if(!filteredReport.includes(e)) {
filteredReport.push(e)
}});
filteredReport.forEach(e => {
let arr = e.split(' ');
details.forEach((e) => {
if(e.name === arr[0]) e.report.push(arr[1]);
if(e.name === arr[1]) e.count++;
})
});
const bannedUser = details.filter(e => e.count >= k).map(e => e.name);
bannedUser.forEach((user) => {
details.forEach((e) => {
if(e.report.includes(user)) e.getMails++;
})
})
return details.map((e) => e.getMails);
}위 코드는 내가 사용한 코드인데
details에 고유 유저id, 신고한 사람[report] 신고 받은 횟수(count) 받은 메일(getMails)로 구조를 나눴다.
쭉 훑어보면 중복 신고는 안된다고 했으니 중복 제거하고
중복 제거된 배열에서 신고자 신고 받은자에 따라서 details에 data넣어주고
다 끝나면 정지된 유저를 걸러서 정지된 유저를 신고한 사람들에게 getMails++를 해주고 결과를 return했다.
근데 시간초과가 났다..
내가 봐도 forEach와 map을 많이 쓴 것 같지만 꼭 필요한 부분이라고 생각이 들었는데..
이를 어떻게 하면 좋을까 생각해보고 구글링도 해보다가
중복을 제거할 때 [...new Set()]이라는 기능을 사용했더니 시간초과 문제가 해결됐다.
아래는 해결한 코드이니 참고 바란다. 코드 몇 줄로 성능이 좋아지는 경험을 한 점이 좋았다...
function solution(id_list, report, k) {
let details = []
for(let i = 0 ; i < id_list.length ; i++) {
details.push({name : id_list[i], report : [], getMails : 0, count : 0})
}
const filteredReport = [... new Set()];
filteredReport.forEach(e => {
let arr = e.split(' ');
details.forEach((e) => {
if(e.name === arr[0]) e.report.push(arr[1]);
if(e.name === arr[1]) e.count++;
})
});
const bannedUser = details.filter(e => e.count >= k).map(e => e.name);
bannedUser.forEach((user) => {
details.forEach((e) => {
if(e.report.includes(user)) e.getMails++;
})
})
return details.map((e) => e.getMails);
}반응형'Code Etc > 코딩테스트' 카테고리의 다른 글
LRU(Last Recently Used)알고리즘 공부하기 (0) 2022.12.15 프로그래머스 LV 1 완파! (0) 2022.12.10 정규 표현식 - 이제는 확실하게 알고 가자! (1) 2022.11.16 소수 찾는 법 (0) 2022.11.15 JavaScript Array.Sort() - 배열 오름차순, 내림차순 정렬하기 (0) 2022.11.12