[TIL]22.01.30

박주홍·2022년 1월 30일
0

Today I Learned

목록 보기
97/104

new Set

Set객체를 사용하는 이유는 자바스크립트에서 중복되는 데이터를 제거해준다. 그후에 [...Set객체] 와 같은 구조 분해 할당문법을 통해 배열형태로 데이터를 확인 가능하다.

let arr = [1,2,3,4,5];
const set1 = new Set([1, 2, 3, 4, 5]);
set1.add(arr);

console.log([...set1])
=> [1, 2, 3, 4, 5, Array(5)]
set1.add({id: 1, title: "jocker"}) // 객체도 할당가능

new Map

map객체는 다음과 같이 키 - 쌍을 보유함
map은 객체와 다르게 순서를 기억하고 있어서 for ... of문 사용이 가능하다. (배열형태로 출력됌)

const map1 = new Map();

map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);

console.log(map1.get('a'));
// expected output: 1

map1.set('a', 97);

console.log(map1.get('a'));
// expected output: 97

console.log(map1.size);
// expected output: 3

map1.delete('b');

console.log(map1.size);
// expected output: 2

오늘 푼 알고리즘

function solution(id_list, report, k){
    // report에서 유저와 신고한 id를 객체를 가진 배열로 만든다.
    let objTemp = [...new Set(report)].map((data) => {
        return {user: data.split(" ")[0], reportedUser: data.split(" ")[1]}
    });
    // 만든 객체에서 신고당한 횟수를 각 유저 객체에 넣는다.
    let reportedUsers = getReportedPeople(id_list, report, k);
    objTemp = objTemp.map((data, idx)=>{
        data["reportedNumber"] = reportedUsers[idx];
        return data;
    })
    // 신고한 유저의 신고당한 유저가 k번 이상 신고를 당했을시 신고한 유저가 메일을 받게된다.
    // 배열을 반환해야하므로, id_list에 맞춰서 [] 반환한다. (조금 추상적일 수 있겠다.)
    
}

// input
//["muzi", "frodo", "apeach", "neo"], ["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"], 2
// output
// { 유저, 유저가 신고한 ID, 신고당한 횟수}
// [정지된 ID]

/*
    0: {user: 'muzi', reportedUser: 'frodo'}
1: {user: 'apeach', reportedUser: 'frodo'}
2: {user: 'frodo', reportedUser: 'neo'}
3: {user: 'muzi', reportedUser: 'neo'}
4: {user: 'apeach', reportedUser: 'muzi'}
*/
function getReportedPeople(id_list, report, k){
    let objTemp = {};
    let result = [];
    
    for(let i = 0; i < id_list.length; i++){
        objTemp[id_list[i]] = 0;
    }
    
    for(let i = 0; i < report.length; i++){
        if(report[i] === report[i + 1]){
            continue;
        }else{
            let reportedPerson = report[i].split(" ")[1];
            objTemp[reportedPerson] += 1;
        }
    }
    

    for(let i = 0; i < id_list.length; i++){
        result.push(objTemp[id_list[i]]);
    }
    
    return result;
}

논리적사고가 많이 부족한 것 같다. 그저 시간을 의식적으로 많이 쏟아보자.

profile
고통없는 성장은 없다고 할 수 있겠다....

0개의 댓글