-
[코딩테스트]1. 신고 결과 받기[프로그래밍 | 개발]/[코딩테스트] 2022. 2. 19. 22:32
문제 받고 처음 풀었던 것
const solution = (id_list, report, k) => { const answer = Array.from({length: id_list.length}, () => 0); /* {user: reportedCnt} */ const userReportedCntObj = {}; for (const i in id_list) { // 신고한 사람 리스트 const reportUserList = []; userReportedCntObj[id_list[i]] = 0; for (const _ of report) { // 신고한 사람 const reportUser = _.split(' ')[0]; // 신고 당한 사람 const reportedUser = _.split(' ')[1]; if (id_list[i] === reportedUser && reportUserList.indexOf(reportUser) < 0) { reportUserList.push(reportUser); userReportedCntObj[id_list[i]] += 1; } } if (userReportedCntObj[id_list[i]] >= k) { for (const j in id_list) { if (reportUserList.indexOf(id_list[j]) > -1) { answer[j] += 1; } } } } return answer; }단순 코드 실행에서는 통과됐지만, 퍼포먼스에서 떨어져서 탈락
셋이 들어가야 할 것 같다는 건 대충 생각이 들었는데,
다른 분이 짠 코드 보고 스프레드 연산자로 '배열 > 셋' 으로 만드는 것을 처음 알았다.
다른 분 것으로 테스트 하려고 눌렀다가 제출 되어버려서... 낭패..
실수로 제출하면 박제된다. 조심하자.
내 생각의 코드가 아니므로,
그 분의 코드를 읽어가며 조금씩 바꿔 보았다
const listToObj = (_) => { const obj = {}; const set = [...new Set(_)]; set.forEach( __ => { const tmp = __.split(' '); ! obj[tmp[1]] ? obj[tmp[1]] = [tmp[0]] : obj[tmp[1]] = [...obj[tmp[1]], tmp[0]]; }); return obj; }; const solution = (id_list, report, k) => { const reportObj = listToObj(report); const answer = Array.from({ length: id_list.length }, () => 0); for (const i in reportObj) { if (reportObj[i].length >= k) { const reportUserList = reportObj[i]; reportUserList.forEach((user) => { answer[id_list.indexOf(user)]++; }); } } return answer; };배운 점
1. 스프레드 연산자로 간단하게 배열 > 셋 형식으로 형변환
2. Array 객체 기본 메서드로 원하는 길이의 원하는 값들 간단한 초기화