반응형
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/258712
문제 풀이 힌트
문제 풀이 코드
function solution(friends, gifts) {
let N = friends.length;
const nameMap = new Map(); //친구들 이름에 따른 idx map 에 저장
const giftTable = Array.from({length: N}).map(() => new Array(N).fill(0)); //친구들끼리 주고받은 선물 내역 저장
const rankInfo = new Array(N).fill(0); //선물지수 계산하는 1차원 배열
const nextMonth = new Array(N).fill(0);
//친구들의 이름과 idx를 map에 set 한다.
friends.forEach((name, idx) => {
nameMap.set(name, idx)
})
//선물 내역 저장
gifts.forEach((info) => {
const [from, to] = info.split(' ');
giftTable[nameMap.get(from)][nameMap.get(to)]++;
})
// 선물 지수 계산
for(let i=0; i<N; i++){
rankInfo[i] = giftTable[i].reduce((a,b) => a+b , 0) //i줄은 선물을 줬으니 +1
for(let j=0; j<N; j++){ //j줄은 선물을 받은 것이니, 기존 선물지수에서 -1 을 한다.
rankInfo[i] -= giftTable[j][i]
}
}
//다음달 받을 선물 수 계산
for (let i=0; i<N; i++) {
for (let j=i+1; j<N; j++) {
if (i===j) continue;
if (giftTable[i][j] > giftTable[j][i]) nextMonth[i]++;
if (giftTable[i][j] < giftTable[j][i]) nextMonth[j]++;
if (giftTable[i][j] === giftTable[j][i]) {
if (rankInfo[i] > rankInfo[j]) nextMonth[i]++
if (rankInfo[i] < rankInfo[j]) nextMonth[j]++
}
}
}
return Math.max(...nextMonth)
}
Only 문제 풀이
function solution(friends, gifts) {
let N = friends.length;
const nameMap = new Map();
const giftTable = Array.from({length: N}).map(() => new Array(N).fill(0));
const rankInfo = new Array(N).fill(0);
const nextMonth = new Array(N).fill(0);
friends.forEach((name, idx) => {
nameMap.set(name, idx)
})
gifts.forEach((info) => {
const [from, to] = info.split(' ');
giftTable[nameMap.get(from)][nameMap.get(to)]++;
})
for(let i=0; i<N; i++){
rankInfo[i] = giftTable[i].reduce((a,b) => a+b , 0)
for(let j=0; j<N; j++){
rankInfo[i] -= giftTable[j][i]
}
}
for (let i=0; i<N; i++) {
for (let j=i+1; j<N; j++) {
if (i===j) continue;
if (giftTable[i][j] > giftTable[j][i]) nextMonth[i]++;
if (giftTable[i][j] < giftTable[j][i]) nextMonth[j]++;
if (giftTable[i][j] === giftTable[j][i]) {
if (rankInfo[i] > rankInfo[j]) nextMonth[i]++
if (rankInfo[i] < rankInfo[j]) nextMonth[j]++
}
}
}
return Math.max(...nextMonth)
}
알고가는 ppoint
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
백준 2512: 예산 - javascript (이진탐색) (0) | 2024.03.09 |
---|---|
백준 21736: 헌내기는 친구가 필요해 - javascript(dfs) (1) | 2024.03.07 |
백준 1049: 기타줄 - javascript(그리디) (0) | 2024.03.07 |
백준 9012: 괄호 - javascript(문자열) (1) | 2024.03.07 |
백준 1193 : 분수 찾기 - javascript(구현) (1) | 2024.03.07 |