알고리즘 문제풀이/프로그래머스
[프로그래머스] 카카오 2024 가장 많이 받은 선물
lovelyunsh
2024. 5. 28. 21:10
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/258712
2. 접근방법
단순 구현 문제
우선 편하게 풀이하기 위해 친구의 이름을 모두 HashMap에 index와 매칭 시켜준다.
이전 선물 정보를 토대로
1. 2차원 배열로 각 친구가 누구에게 선물을 몇개씩 주었는지 저장.
2. 선물지수 정보 저장.
이중 for문으로 몇 개의 선물을 받을지 구하기.
모든 인원 중 가장 많이 받은 선물의 갯수 return
3. 자바 코드
import java.util.*;
class Solution {
public int solution(String[] friends, String[] gifts) {
int answer = 0;
Map<String, Integer> indexMap = new HashMap<>();
for (int i = 0; i < friends.length; i++) {
indexMap.put(friends[i], i);
}
int[][] giftArray = new int[friends.length][friends.length];
int[] giftNum = new int[friends.length];
for (String gift : gifts) {
String[] giftSplit = gift.split(" ");
int giveIndex = indexMap.get(giftSplit[0]);
int receiveIndex = indexMap.get(giftSplit[1]);
giftNum[giveIndex]++;
giftNum[receiveIndex]--;
giftArray[giveIndex][receiveIndex]++;
}
int nowGift[] = new int[friends.length];
for (int i = 0; i < friends.length; i++) {
for (int j = 0; j < friends.length; j++) {
if (i == j) continue;
if (giftArray[i][j] > giftArray[j][i]) {
nowGift[i]++;
} else if (giftArray[i][j] == giftArray[j][i] && giftNum[i] > giftNum[j]) {
nowGift[i]++;
}
}
}
return Arrays.stream(nowGift).max().getAsInt();
}
}
4. 마치며
카카오 1번 문제 인데 난이도가 조금 올라간 느낌.