FrontEnd/프로그래머스

[JS] 가장 많이 받은 선물

728x90

map 자료형을 활용한 나름 간단한(?) 구현문제이다.

 

https://school.programmers.co.kr/learn/courses/30/lessons/258712

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

map자료형에 사람이름을 key로 두고 send에는 해당 사람이 보낸 사람들의 목록을 , get에는 내가 받은 사람의 목록을 저장한다.

 

 

사람들끼리 선물을 돌리게 하기 위해서 반복문을 사용하면서 순회하고, 서로 선물을 주고받으면 된다.

 

1. 서로선물을 주고받은 경우 -> 더 많이 선물을 준사람이 받음

2. 서로 선물을 주고받은 수가 같은 경우 -> 선물포인트를 계산하여 더 큰사람이 받음

 

function solution(friends, gifts) {
    const map = new Map()
    const retMap = new Map()
    
    for (const friend of friends){
        const initialFrined = {
            send : [],
            get : []
        }
        map.set(friend,initialFrined)
        retMap.set(friend,0)
    }
    
    for(const gift of gifts){
        const [a,b] = gift.split(' ')
        map.get(a).send.push(b)
        map.get(b).get.push(a)
    }
    
    const getGiftPoint = (name) => {
        return map.get(name).send.length - map.get(name).get.length
    }
    
    const getGift = (name) => {
        retMap.set(name,retMap.get(name)+1)
    }
    
    //선물 주고받기
    for(let i = 0 ; i < friends.length; i++){
        const A = friends[i]
        for(let j = i+1 ; j < friends.length ; j++){
            const B = friends[j]
            
            const giftCntAToB = map.get(A).send.reduce((a,c) => c===B ?a+1:a,0)
            const giftCntBToA = map.get(B).send.reduce((a,c) => c===A ?a+1:a,0)
            
            
            if(giftCntAToB === giftCntBToA){
                const AGiftPoint = getGiftPoint(A)
                const BGiftPoint = getGiftPoint(B)
                
                if(AGiftPoint>BGiftPoint) getGift(A)
                else if (BGiftPoint>AGiftPoint) getGift(B)
            } else {
                if(giftCntAToB > giftCntBToA) getGift(A)
                else getGift(B)
            }
            
        }
    }
    
    console.log(retMap)
    return Math.max(...[...retMap].map(v => v[1]))
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 도넛과 막대 그래프  (1) 2024.01.12
[JS] 등굣길  (0) 2024.01.11
[JS] 주사위 고르기  (0) 2024.01.06
[JS] n+1 카드게임  (1) 2024.01.05
[JS] 네트워크  (1) 2024.01.03