알고리즘
[2024 kakao Winter Internship] 가장많이받은 선물
kwonpinky
2024. 3. 5. 23:50
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/258712
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(friends,gifts){
let next=Array(friends.length).fill(0)// 다음달에 받을 선물 배열
let psIndex=Array(friends).fill(0)// 선물지수
let graph=Array(friends.length).fill().map(()=>Array(friends.length).fill(0))
for(let i=0;i<gifts.length;i++){
let [giver,receiver]=gifts[i].split(" ")
let giverId=friends.indexOf(giver)
let receiverId=friends.indexOf(receiver)
graph[giverId][receiverId]=graph[giverId][receiverId]+1
}
for(let t=0;t<friends.length;t++){
let gives=0
let get=0
for(let w=0;w<friends.length;w++){
get+=graph[w][t]
gives+=graph[t][w]
}
let diff=gives-get
psIndex[t]=diff // 선물 지수 배열 입력
}
for(let j=0;j<graph.length;j++){
for(let k=j+1;k<graph.length;k++){
if(graph[j][k]===graph[k][j]){
//선물을 주고받은 기록이 없거나 주고받은 수가 같은 경우 => 선물지수로 비교
if(psIndex[j]>psIndex[k]){
next[j]=next[j]+1
}else if(psIndex[j]<psIndex[k]){
next[k]=next[k]+1
}
}else{
//더 많은 선물을 준 사람이 다음달에 하나 받음
if(graph[j][k]>graph[k][j]){
next[j]=next[j]+1
}else{
next[k]=next[k]+1
}
}
}
}
answer=Math.max(...next)//배열 중 최대값 리턴
return answer
}728x90