반응형
문제 설명
제한 사항
입출력 예
입출력 예 설명
풀이(주석 포함)
import java.util.*;
class Solution {
public int solution(String[] friends, String[] gifts) {
int friendsLength = friends.length;
// 빠르게 친구 찾기 위한 해시맵 생성
HashMap<String, Integer> friendsMap = new HashMap<>();
for(int i = 0; i < friendsLength; i++){
friendsMap.put(friends[i], i);
}
// gifts 배열 돌면서 두 배열 생성(인덱스 : friendsMap의 value)
// 1. giftDegree(선물지수) : 주면 +1, 받으면 -1
// 2. giftGraph : 입출력 예제와 같은 형태의 2차원 배열
int[] giftDegree = new int[friendsLength];
int[][] giftGraph = new int[friendsLength][friendsLength];
for(String gift : gifts){
String[] giftName = gift.split(" "); // 공백 기준으로 분할
giftDegree[friendsMap.get(giftName[0])]++; // 선물 준 것
giftDegree[friendsMap.get(giftName[1])]--; // 선물 받은 것
giftGraph[friendsMap.get(giftName[0])][friendsMap.get(giftName[1])]++;
}
int answer = 0;
for(int i = 0; i < friendsLength; i++){
int count = 0;
for(int j = 0; j < friendsLength; j++){
// 본인일 경우 다음 반복문
if(i == j){
continue;
}
// 선물 준 적이 더 많거나 동일한 갯수로 주고 받았다면 선물지수가 더 높다면
if(giftGraph[i][j] > giftGraph[j][i] ||
(giftGraph[i][j] == giftGraph[j][i] && giftDegree[i] > giftDegree[j])){
count++;
}
// 선물 지수 비교해서 높은 것을 저장
if(answer < count){
answer = count;
}
}
}
return answer;
}
}
반응형
'자료구조 & 알고리즘' 카테고리의 다른 글
[백준] 1991 트리 순회 Java 풀이 (0) | 2023.08.28 |
---|---|
[자료구조] Tree 순회 방법 - 전위/중위/후위 순회 & Java 예시 코드 (0) | 2023.08.06 |
[백준] 11729 하노이 탑 이동순서 풀이 (0) | 2023.08.06 |
[Algorithm] Big-O 표기법이란(+ 시간 복잡도, 공간 복잡도) (0) | 2023.06.13 |
[자료구조] 해시 테이블(Hash Table) 자료구조 알아보기 & Java 예제 코드 (0) | 2023.06.11 |