A.P - 신고 결과 받기 (프로그래머스, L1)

EBinY·2022년 6월 28일
0

AP - Algorithm Problem

목록 보기
43/55
  1. 문제
  • 게시판 이용자들간의 신고 누적을 통한 이용 정지를 하고, 이용 정지된 신고자들에게 확인 이메일을 보냄, 이용자들의 이메일 수신 횟수를 리턴하라
  • 요소 : 이용자리스트, 신고목록, 정지기준횟수
  • 조건 : 같은 이용자를 중복 신고는 가능하지만 1회만 인정, 자기 자신을 신고하지는 못함
  1. 수도코드
    // report의 요소는 띄어쓰기를 포함한 문자열들로 구성
    // 띄어쓰기의 앞은 신고자, 뒤는 피신고자
    // 신고자는 피신고자를 여러번 신고할 수 있지만 1회만 인정됨
    // 신고자가 신고한 피신고자의 신고횟수가 k 이상일 때 신고 메일을 받음
    // 신고자가 신고한 피신고자들과 그 피신고자들의 신고횟수를 알고, k와 비교
    // 2가지 이상의 명단을 가져야 함
    // 각 아이디당 신고당한 횟수, 각 아이디당 받을 메일 수
    // 그 중 메일 수 명단을 리턴해야 함
  1. 결과
function solution(id_list, report, k) {
    // 중복은 1회로 인정되니 report에서 중복값을 제거해 불필요한 계산을 방지
    let repo = [...new Set(report)];

    // 2가지의 카운팅용 명단을 만들자, 아이디별 신고받은 횟수, 받을 이메일 수
    let warn = Array(id_list.length).fill(0);
    let mail = Array(id_list.length).fill(0);
  
    // 차단 기준을 넘는 이용자들을 담을 빈배열 명단을 만들자
    let out = [];
    
    // 아이디별로 신고한 아이디를 담을 명단을 만들자, 빈 배열로 만들면 될 듯
    let list = Array(id_list.length).fill([]);
    
    // repo에서 요소를 띄어쓰기로 분리하고
    // 앞의 아이디에 해당하는 list에 뒤의 아이디값을 저장하고(모든값이 담겨서 포기)
    // 뒤의 아이디에 해당하는 warn에 카운트++를 한다
    for (let a of repo) {
        let c = a.split(" ")[1];
        warn[id_list.indexOf(c)] += 1;
        if (warn[id_list.indexOf(c)] >= k) {
            out.push(id_list.indexOf(c))
        }
    }

    for (let a of repo) {
        let b = a.split(" ")[0];
        let c = a.split(" ")[1];
        if (out.includes(id_list.indexOf(c))) {
            mail[id_list.indexOf(b)] += 1;
        }
    }

    return mail;
}
  1. 레퍼런스
function solution(id_list, report, k) {
    let reports = [...new Set(report)].map(a=>{return a.split(' ')});
    let counts = new Map();
    for (const bad of reports){
        counts.set(bad[1],counts.get(bad[1])+1||1)
    }
    let good = new Map();
    for(const report of reports){
        if(counts.get(report[1])>=k){
            good.set(report[0],good.get(report[0])+1||1)
        }
    }
    let answer = id_list.map(a=>good.get(a)||0)
    return answer;
}
  • map와 set을 활용한 풀이, 레퍼런스 자체를 공부해 봐야겠다

0개의 댓글

관련 채용 정보