신고 결과 받기

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

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

 

문제 설명

신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.

  • 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
    • 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
    • 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
  • k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
    • 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.

 

키포인트
1. 배열함수 map의 활용

map 메서드는 자신을 호출한 배열의 모든 요소를 순환하면서 인수로 전달받은 콜백 함수를 반복 호출한다.

반환값은 콜백 함수의 반환값들로 구성된 새로운 배열이다. 원본 배열의 변경은 없다

 

2. key의 사용

프로퍼티에 접근하는 방법은 다음과 같이 두 가지가 있다.

  • 마침표 프로퍼티 접근 연산자(.)을 사용하는 마침표 표기법
  • 대괄호 프로퍼티 접근 연산자([ ... ])를 사용하는 대괄호 표기법

아래는 예시이다.

var person = {
	name : 'Lee'
};

console.log(person.name); // 마침표 표기법
console.log(person['name']); //대괄호 표기법

 

문제 코드
function solution(id_list, report, k) {
    let answer = new Array(id_list.length);
    let reported = new Set();
    answer.fill(0);
    
    id_list.map(user => {
        reported[user] = [];
    })
    
    report.map(user => {
        const [user_id, report_id] = user.split(" ");
        if(!reported[report_id].includes(user_id))
            reported[report_id].push(user_id);
    })
    
    for(const key in reported) {
        if(reported[key].length >= k) {
            reported[key].map(user => {
                answer[id_list.indexOf(user)]++;
            })
        }
    }
    
    return answer;
}

 

후기

c처럼 짜면 좆된다..

'프로그래머스 (JS)' 카테고리의 다른 글

[1차] 추석 트래픽  (0) 2022.03.08
오픈채팅방  (0) 2022.03.04
문자열 압축  (0) 2022.03.03
신규 아이디 추천  (0) 2022.02.27
로또의 최고 순위와 최저 순위  (0) 2022.02.27