보라코딩

프로그래머스 자바 :: 가장 많이 받은 선물 본문

프로그래머스 (java)

프로그래머스 자바 :: 가장 많이 받은 선물

new 보라 2024. 5. 19. 09:57

오랜만에 코테...

1단계인데 문제가 엄청 길다...

 

 

너무 막막해서 30분 이상 고민하다가 

해답을 보니 생각보다 엄청 어려운 문제는 아니였다.....

 

 

다만 생각해내는게 어렵지...

그래도 HashMap을 사용해야겠다는 점을 배울 수 있었다.

 

 

다른 사람 코드 보면서 한번 따라치고

이후엔 다시 스스로 생각해서 풀어봤다.

 

 

정말 갈길이 멀다...ㅎ

 

 

 

 

 

import java.util.*;

class Solution {
    public int solution(String[] friends, String[] gifts) {
        int answer = 0;
        int len = friends.length;
        HashMap<String, Integer> map = new HashMap<>();
        int[] degree = new int[len]; // 선물지수
        int[][] graph = new int[len][len];
        
        // key-value로 친구 쉽게 찾기 위해 map 구성
        for (int i = 0; i < len; i++){
            map.put(friends[i], i);
        }
        
        
        for(String gift : gifts) {
            String[] split = gift.split(" ");
            // 선물 지수 : 선물을 주면 +, 선물을 받으면 -
            degree[ map.get(split[0]) ]++;
            degree[ map.get(split[1]) ]--;
            // 4*4 gitf 그래프 구성
            graph[ map.get(split[0]) ][ map.get(split[1]) ]++;
        }
                                                
        // 조건에 따른 선물 주고 받기
        for (int i = 0; i < len; i ++) {
            int num = 0;
            
            for (int j = 0; j < len; j++) {
                if ( i == j ) {
                    continue;
                }
                
                // 주고 받은 선물 많은 사람이 받기 또는 주고 받은게 같다면 선물지수가 큰 사람이 받기
                if ( graph[i][j] > graph[j][i] ||
                     ( graph[i][j] == graph[j][i] && degree[i] > degree[j] )
                   ) {
                    
                    num++;
                }
            }
            if (answer < num){
                answer = num;
            }
        }
        return answer;                                    
    }
}