프로그래먼스 카카오 블라인드 채용 코딩테스트 문제 : 신고 결과 받기
- 문제
2. 내가 푼 해답
const transformObj = (array) => {
const obj = {};
const set = [...new Set(array)];
set.forEach((log) => {
const tmp = log.split(' ');
if (obj[tmp[1]] === undefined) {
obj[tmp[1]] = [tmp[0]];
} else {
obj[tmp[1]] = [...obj[tmp[1]], tmp[0]];
}
});
return obj;
};
const solution = (id_list, report, k) => {
const report_obj = transformObj(report);
const answer = Array.from({ length: id_list.length }, () => 0);
for (let i in report_obj) {
if (report_obj[i].length >= k) {
const ids = report_obj[i];
ids.forEach((id) => {
const index = id_list.indexOf(id);
answer[index]++;
});
}
}
return answer;
};
- report를 { 신고당한사람 : [신고한 사람1, 신고한 사람2…]} 형태의 객체로 바꾼다. (이때 set을 활용하면 중복을 제거할 수 있다.)
- 위에서 반환받은 객체의 key를 반복문으로 돌면서 k번 이상 신고당한 사람일 경우, 카운트를 1 증가시킨다.
- 반환한다.
끝이다! 비교적 문제는 쉬웠는데, 뭔가 노가다로 푼 듯한 느낌이 사라지지 않는다.
더 좋은 풀이를 계속 찾고, 다른 사람들의 코드도 계속해서 참고해야겠다.
그리고 코딩테스트 문제를 풀면서 처음으로 함수를 분리시켜봤는데, 가독성이 훨씬 좋고 디버깅이 편해졌다.
앞으론 코딩테스트에서도 기능별로 함수를 잘 설계해야겠다!