문제 설명은 아래와 같다.
일단 그냥 생각나는대로 그냥 짬
내가 짰지만~~ 너무 쓰레기 같아서 올리기도 부끄러움ㅋㅋ...
그래서 코드는 안 올렸어요
돌아간다고해서 잘 짠 코드가 아니죠? 속도 효율 개똥;;
특단의 결심.
다시 짠다 이거야
코드와 헤어질 결심.
import java.util.*;
class Solution {
public int solution(String[] friends, String[] gifts) {
// 선물을 주고받은 이차원 배열, 누가 누구에게 몇개 줬는지 담음
int allGifts[][] = new int [friends.length][friends.length];
// 0으로 세팅
for (int i = 0; i < allGifts.length; i++) {
Arrays.fill(allGifts[i], 0);
}
// 선물 지수 배열
int giftLevel[] = new int[friends.length];
// 0으로 세팅
Arrays.fill(giftLevel, 0);
// 이름으로 인덱스를 찾기 위한 map
HashMap<String, Integer> friendsIndexMap = new HashMap<String, Integer>();
// map에다가 key는 이름 value는 index 세팅
for(int i = 0 ; i <friends.length ; i++) {
friendsIndexMap.put(friends[i], i);
}
// gifts를 for문 돌리면서 allGifts 2차원 배열 채우기
for(String gift : gifts) {
String [] nowFriends = gift.split(" ");
int giveFrinedIndex = friendsIndexMap.get(nowFriends[0]);
int givenFrinedIndex = friendsIndexMap.get(nowFriends[1]);
allGifts[giveFrinedIndex][givenFrinedIndex]++;
// 선물지수 계산
giftLevel[giveFrinedIndex]++;
giftLevel[givenFrinedIndex]--;
}
// 다음달에 가장 많은 선물을 받는 친구가 받을 선물의 수
int max = 0;
for(int i = 0 ; i <friends.length ; i++) {
int perMax = 0;
for(int j = 0 ; j <friends.length ; j++) {
// i, j가 같으면 같은 사람이므로 continue
if(i==j) continue;
int countDiff = allGifts[i][j]-allGifts[j][i];
// i가 선물을 더 많이 받았으면 +1
if(countDiff > 0) {
perMax++;
} else if(countDiff == 0) {
// i와 j의 주고받은 선물 수가 0인 경우 선물 지수에 따라 +1
if(giftLevel[i]-giftLevel[j] > 0) {
perMax++;
}
}
}
max = perMax > max ? perMax : max;
}
return max;
}
}
하하
끝