[lv.1] 가장 많이 받은 선물

RTUnu12·2024년 3월 17일
0

Programmers

목록 보기
40/41

https://school.programmers.co.kr/learn/courses/30/lessons/258712

  • 문제

  • 풀이
    생구현이다.
    진짜 말그대로 각 받은 선물, 준 선물을 표시한 뒤 선물 지수를 구하고
    이후 서로 비교하여 누가 받는지를 계산한다
    아니 근데 lv.1인데 난이도 차이 왜이래
    구현하는데 35분 걸렸다 하...

  • 코드

import java.util.*;

class Solution {
    public int solution(String[] friends, String[] gifts) {
        int[][] graph = new int[friends.length][friends.length];
        int[] giftScore = new int[friends.length];
        HashMap<String, Integer> map = new HashMap<>();
        for(int i=0; i<friends.length; i++){
            map.put(friends[i], i);
        }
        StringTokenizer st;
        for(int i=0; i<gifts.length; i++){
            st = new StringTokenizer(gifts[i]);
            graph[map.get(st.nextToken())][map.get(st.nextToken())]++;
        }
        for(int i=0; i<friends.length; i++){
            int give = 0;
            for(int j=0; j<graph.length; j++){
                give += graph[map.get(friends[i])][j];
            }
            int get = 0;
            for(int j=0; j<graph.length; j++){
                get += graph[j][map.get(friends[i])];
            }
            giftScore[map.get(friends[i])] = give-get;
        }
        int[] result = new int[friends.length];
        int max = 0;
        for(int a=0; a<friends.length; a++){
            int now = map.get(friends[a]);
            for(int i=0; i<graph.length; i++){
                if(now==i) continue;
                if(graph[now][i]>graph[i][now]) result[now]++;
                else if(graph[now][i]<graph[i][now]) result[i]++;
                else{
                    if(giftScore[now]>giftScore[i]) result[now]++;
                    else if(giftScore[now]<giftScore[i]) result[i]++;
                    else continue;
                }
            }
        }
        for(int i=0; i<result.length; i++){
            max = Math.max(result[i], max);
        }
        return max/2;
    }
}
profile
이제 나도 현실에 부딪힐 것이다.

0개의 댓글