728x90
[Javascript] (프로그래머스 level 1) 신고 결과 받기
💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.
내 풀이
function solution(id_list, report, k) {
// 1) report 중복제거
const set = new Set(report)
// 2) id_list 객체에 담기
const banedUsers = {}
id_list.forEach((x) => banedUsers[x] = [0,[]]);
// user가 = [0번 신고당함, []얘들을 신고함]
// 3) report set에 있는 신고데이터 map에 담기
for (let x of set) {
let keyValue = x.split(' ');
let key = keyValue[0];
let value = keyValue[1];
banedUsers[value][0]++;
banedUsers[key][1].push(value);
}
// 4) k 이상이면 baned에 true
const baned = [];
id_list.forEach((x, i) => {
if (banedUsers[x][0] >= k) {
baned.push(x);
}
})
// 5) baned에 true인 애들을 banedUsers에서 찾아서 mails에 ++ 하기
const mails = new Array(id_list.length).fill(0);
for (let i = 0; i < id_list.length; i++) {
mails[i] = baned.filter((x) => banedUsers[id_list[i]][1].includes(x)).length;
}
return mails
}
- 몇 일 동안 시도했습니다. 한번이라도 풀어보는게 급해져서 그냥 블로그 찾아보면서 힌트 조금씩 얻으면서 풀었는데도 엄청 힘들게 풀었어요 😭
- Object보다 Hashmap이 성능이 더 좋아서, HashMap으로 풀고 싶은데 결국 못풀고 object사용했습니다.. 그런데 아래 다른 사람 풀이는 HashMap으로 푸셨네요. 정말 매일 매일 부족함을 많이 느낍니다.
다른 사람 풀이
function solution(id_list, report, k) {
let reports = [...new Set(report)].map(a=>{return a.split(' ')});
let counts = new Map();
for (const bad of reports){
counts.set(bad[1],counts.get(bad[1])+1||1)
}
let good = new Map();
for(const report of reports){
if(counts.get(report[1])>=k){
good.set(report[0],good.get(report[0])+1||1)
}
}
let answer = id_list.map(a=>good.get(a)||0)
return answer;
}
- 셋에 넣고 바로 빼서 배열로 만드는 한 줄 짜리 코드가 있네요 ; 저번에 본것같긴한데 또 만나니 새로운건 왜일까? 🤣
배운 점, 느낀 점
- 안 써보면 기억 안난다. 써봐야 한다.
- 오늘은 셋으로 중복 제거 하면서 …로 까서 배열에 넣고 바로 맵이나 필터 등 쓰는걸 연습해야겠다.
const reports = […new Set(report)].map((x) ⇒ x.split(’ ‘));
코드를 한글로 설명하니까 무슨 말인지 모르겠네 ㅋㅋ
댓글