[프로그래머스 Lv1] 신고 결과 받기 JavaScript

파이·2022년 3월 23일
0

최근에 Lv2 문제를 푸는 족족 실패하고 있어서 다시 Lv1부터 풀려고 보니 새로운 문제가 있어서 풀게 되었다.

머릿속으로 생각 하기엔 많이 어려운 문제는 아니었는데, 반복문을 여러번 돌릴 생각을 하다보니 시간이 꽤나 걸렸던 문제다.


https://programmers.co.kr/learn/courses/30/lessons/92334

전체 코드

function solution(id_list, report, k) {
    var answer = [];
    
    // 신고한 멤버를 담을 객체 생성
    const members = {}
    const target = {}
    for (let id of id_list) {
        members[id] = []
    }
    // 각 id가 신고한 멤버 추가, 중복은 추가x
    for (let value of report) {
        const [repoter, reported] = value.split(' ')
            if (!members[repoter].includes(reported)) {
            	members[repoter].push(reported)
        }
    }
    // 객체의 배열을 돌면서 각 신고당한 갯수 카운트
    for (let key in members) {
        for (let t of members[key]) {
            target[t] ? target[t] += 1 : target[t] = 1
        }
    }
    // 멤버별로 리포트 올 갯수 확인
    for (let key in members) {
        let cnt = 0;
        for (let val of members[key]) {
            if (target[val] >= k) cnt++
        }
        answer.push(cnt)
    }
    return answer;
}

문제 자체는 어렵지 않지만, 문제가 길다보니 간단하게 내용을 정리했다.

  1. report는 공백으로 나눠지며, 각 신고자 / 피신고자 이다.
  2. 한 신고자가 피신고자를 중복으로 신고해도, 1회만 처리된다.
  3. id_list의 담긴 순서대로, 신고자가 신고한 피신고자의 제제 명 수를 리턴한다.

그리고 순서대로 각 용도에 맞는 객체를 생성하고 반복문을 돌려 값을 뽑아주면 된다.

좀 더 간결하게 작성하고 싶었는데, 아쉽다.

profile
기록

0개의 댓글