티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/92334
코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr
해결방법
1. 동일 유저에 대한 신고는 여러번 가능해도 횟수는 1로 처리되므로 먼저 report의 중복 제거
2. 신고 여부를 찾기 쉽게 report의 각 요소를 띄어쓰기를 기준으로 구분하여 배열 형태로 바꾸기
3. for문으로 신고를 받았을 때마다 신고 받은 횟수 count++
4. count가 k번 이상일 때만 신고자가 받을 메일 횟수 +1
풀이
function solution(id_list, report, k) {
var report_arr = [];
var answer = [];
//메일 받을 횟수가 들어갈 배열
for (let i = 0; i < id_list.length; i++){
answer.push(0);
}
//중복제거
let report1 = [...new Set(report)];
//각 요소를 배열 형태로
for (let text of report1){
report_arr.push(text.split(' '));
}
for (let i = 0; i < id_list.length; i++){
let count = 0;
//신고받았으면 +1
for (let j = 0; j < report_arr.length; j++){
if (id_list[i] === report_arr[j][1]) count++;
}
//신고를 총 k번 이상 받았을 때만 신고자의 메일 횟수 +1
if (count >= k) {
for (let s = 0; s < report_arr.length; s++){
if (id_list[i] === report_arr[s][1]){
answer[id_list.indexOf(report_arr[s][0])]++;
}
}
}
}
return answer;
}
배운 점
1. map을 사용하자
다른 분의 풀이에서 map으로 더 간결한 코드를 작성한 것을 보았다
배열의 요소를 하나씩 사용해야 때 map에 더 익숙해져야겠다는 생각이 들었다
나는 아래 코드와 같이 report를 중복 제거하여 report1에 저장 한 후 for문을 이용해 report_arr에 하나씩 push했다
let report1 = [...new Set(report)];
for (let text of report1){
report_arr.push(text.split(' '));
}
map을 쓴다면 이렇게 한 줄로 해결할 수 있다
let report_arr = [...new Set(report)].map(a => a.split(' '));
'JS-algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 타겟 넘버 (javascript) (0) | 2023.06.24 |
---|---|
[프로그래머스] 로또의 최고 순위와 최저 순위 (javascript) (0) | 2022.06.22 |
[프로그래머스] 약수의 개수와 덧셈 (javascript) (0) | 2022.06.21 |
댓글