728x90
문제 바로가기: https://school.programmers.co.kr/learn/courses/30/lessons/258712
나의 풀이 FAIL
function solution(friends, gifts) {
// A가 선물을 주고
// B가 선물을 줬다면
// 선물을 더 많이 준 사람이 다음 달 선물 +1
// 선물을 더 적게 준 사람이 다음 달 선물 -1
// 선물을 주고 받은 기록 0
// A = B
// 선물 지수가 더 작은 사람 선물 -1
// 선물 지수가 더 큰 사람 선물 +1
// 친구들의 이름 배열 friends
// 선물의 기록 gifts
// " "로 split
// 기록을 할 준비
let record = new Map();
let nextMonth = new Map();
let data = {}
let total = []
for (i=0; i<friends.length; i++){
let friendI = friends[i]
data[friendI] = 0
}
for (i=0; i<friends.length; i++){
record.set(friends[i], data)
nextMonth.set(friends[i], 0)
}
// 이번달
for (i=0; i<gifts.length; i++){
let giver = gifts[i].split(" ")[0]
let receiver = gifts[i].split(" ")[1]
let giverOriginalData = record.get(giver)
let receiverOriginalData = record.get(receiver)
// 선물 지수는 본인의 이름 key의 value
giverOriginalData[giver] = giverOriginalData[giver] +1
receiverOriginalData[receiver] = receiverOriginalData[receiver] -1
// 선물 교환 기록
giverOriginalData[receiver] = giverOriginalData[receiver] -1
receiverOriginalData[giver] = receiverOriginalData[giver] +1
record.set(giver, giverOriginalData)
record.set(receiver, receiverOriginalData)
}
// 다음달
for(i=0; i<friends.length; i++){
for(j = friends.length -1 ; j>i; j--){
let friendI = friends[i]
let friendJ = friends[j]
let IOriginalData = record.get(friendI)
let JOriginalData = record.get(friendJ)
if ( IOriginalData[friendJ] < JOriginalData[friendI]){
nextMonth.set (friendI, nextMonth.get(friendI) + 1)
} else if ( IOriginalData[friendJ] > JOriginalData[friendI]){
nextMonth.set (friendJ, nextMonth.get(friendJ) + 1)
} else if ( IOriginalData[friendJ] == JOriginalData[friendI]) {
if (IOriginalData[friendI] > JOriginalData[friendJ]){
nextMonth.set (friendI, nextMonth.get(friendI) + 1)
} else if (IOriginalData[friendI] < JOriginalData[friendJ]){
nextMonth.set (friendJ, nextMonth.get(friendJ) + 1)
}
}
}
}
for(i=0; i<friends.length; i++){
let friendI = friends[i]
total.push(nextMonth.get(friendI))
}
return total
return Math.max(...total)
}
다른 사람의 풀이
조금 더 노력하기 위해 보지 않았음
소감
새벽 4시까지 풀었지만 풀지 못했다.
다양한 자료구조와 사용법을 익혀야겠다고 생각이 들었다.
내가 알고 있는 걸로 어떻게든 해 보려고 했는데 잘 안 됐다.
코드도 많이 길어졌다.
'verdantjuly > 코딩테스트' 카테고리의 다른 글
프로그래머스 코딩테스트 기초 : 원소들의 곱과 합 (javascript, 20240128) (0) | 2024.01.28 |
---|---|
프로그래머스 코딩테스트 입문 : 컨트롤제트 (javascript, 20240125) (0) | 2024.01.25 |
프로그래머스 코딩테스트 연습 : a와 b 출력하기 (javascript, 20240125) (0) | 2024.01.25 |
프로그래머스 코딩테스트 입문 : 가까운 수 (javascript, 20230801) (0) | 2023.08.01 |
프로그래머스 코딩테스트 입문 : k의 개수 (javascript, 20230731) (0) | 2023.07.31 |