본문 바로가기
카테고리 없음

[Javascript] (프로그래머스 level 1) 신고 결과 받기

by Chaedie 2022. 7. 1.
728x90

[Javascript] (프로그래머스 level 1) 신고 결과 받기

💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.

내 풀이

function solution(id_list, report, k) {
    // 1) report 중복제거
    const set = new Set(report)

    // 2) id_list 객체에 담기
    const banedUsers = {}
    id_list.forEach((x) => banedUsers[x] = [0,[]]);
    // user가 = [0번 신고당함, []얘들을 신고함]

    // 3) report set에 있는 신고데이터 map에 담기
    for (let x of set) {
        let keyValue = x.split(' ');
        let key = keyValue[0];
        let value = keyValue[1];

        banedUsers[value][0]++;
        banedUsers[key][1].push(value);
    }

    // 4) k 이상이면 baned에 true
    const baned = [];
    id_list.forEach((x, i) => {
      if (banedUsers[x][0] >= k) {
          baned.push(x);
      }
    })

    // 5) baned에 true인 애들을 banedUsers에서 찾아서 mails에 ++ 하기
    const mails = new Array(id_list.length).fill(0);
    for (let i = 0; i < id_list.length; i++) {
        mails[i] = baned.filter((x) => banedUsers[id_list[i]][1].includes(x)).length;
    }   

    return mails
}
  • 몇 일 동안 시도했습니다. 한번이라도 풀어보는게 급해져서 그냥 블로그 찾아보면서 힌트 조금씩 얻으면서 풀었는데도 엄청 힘들게 풀었어요 😭
  • Object보다 Hashmap이 성능이 더 좋아서, HashMap으로 풀고 싶은데 결국 못풀고 object사용했습니다.. 그런데 아래 다른 사람 풀이는 HashMap으로 푸셨네요. 정말 매일 매일 부족함을 많이 느낍니다.

다른 사람 풀이

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;
}
  • 셋에 넣고 바로 빼서 배열로 만드는 한 줄 짜리 코드가 있네요 ; 저번에 본것같긴한데 또 만나니 새로운건 왜일까? 🤣

배운 점, 느낀 점

  • 안 써보면 기억 안난다. 써봐야 한다.
  • 오늘은 셋으로 중복 제거 하면서 …로 까서 배열에 넣고 바로 맵이나 필터 등 쓰는걸 연습해야겠다. const reports = […new Set(report)].map((x) ⇒ x.split(’ ‘)); 코드를 한글로 설명하니까 무슨 말인지 모르겠네 ㅋㅋ

댓글