본문 바로가기

알고리즘

[2024 kakao Winter Internship] 가장많이받은 선물

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