문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정답
function solution(friends, gifts) {
const giftsSign = {};
const giftsList = {};
friends.forEach(friend => {
giftsSign[friend] = 0;
giftsList[friend] = [];
});
gifts.forEach(gift => {
const [giver, taker] = gift.split(" ");
giftsSign[giver] += 1;
giftsSign[taker] -= 1;
giftsList[giver].push(taker);
});
let answer = {};
friends.forEach(friend => {
answer[friend] = 0;
});
for (let i = 0; i < friends.length; i++) {
for (let j = i + 1; j < friends.length; j++) {
const A = friends[i];
const B = friends[j];
const giveCount = giftsList[A].filter(friend => friend === B).length;
const takeCount = giftsList[B].filter(friend => friend === A).length;
if (giveCount > takeCount) {
answer[A] += 1;
} else if (giveCount < takeCount) {
answer[B] += 1;
} else {
if (giftsSign[A] > giftsSign[B]) {
answer[A] += 1;
} else if (giftsSign[B] > giftsSign[A]) {
answer[B] += 1;
}
}
}
}
const totalGiftCountArr = Object.values(answer);
return totalGiftCountArr.length > 0 ? Math.max(...totalGiftCountArr) : 0;
}