[프로그래머스(Programmers)][Java,Python] (Lv1) 가장 많이 받은 선물 (2024 KAKAO WINTER INTERNSHIP)

728x90

 

https://school.programmers.co.kr/learn/courses/30/lessons/258712?language=java

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1. Java

import java.util.*;
class Solution {
    public int solution(String[] friends, String[] gifts) {
        int answer = 0;
        Map<String,Integer> friends_info = new HashMap<>();
        int num = friends.length;
        for ( int i = 0; i < num; ++i ) {
            friends_info.put(friends[i],i);
        }
        int[][] gift_history = new int[num][num];
        for ( String g : gifts ) {
            String[] gg = g.split(" ");
            gift_history[friends_info.get(gg[0])][friends_info.get(gg[1])]++;
        }
        int[] gift_degree = new int[num];
        for ( int i = 0; i < num; ++i ) {
            int sum_give = 0;
            int sum_take = 0;
            for ( int j = 0; j < num; ++j ) {
                sum_give += gift_history[i][j];
                sum_take += gift_history[j][i];
            }
            gift_degree[i] = sum_give - sum_take;
        }
        int[] ans = new int[num];
        for ( int i = 0; i < num; ++i ) {
            for ( int j = i+1; j < num; ++j ) {
                int gift_history_i = gift_history[i][j];
                int gift_history_j = gift_history[j][i];
                if ( (gift_history_i == 0 && gift_history_j == 0) || (gift_history_i == gift_history_j) ) {
                    int gift_degree_i = gift_degree[i];
                    int gift_degree_j = gift_degree[j];
                    if ( gift_degree_i > gift_degree_j ) {
                        ans[i]++;
                    } else if ( gift_degree_i < gift_degree_j ) {
                        ans[j]++;
                    }
                } else if ( gift_history_i > gift_history_j ) {
                    ans[i]++;
                } else if ( gift_history_i < gift_history_j ) {
                    ans[j]++;
                }
            }
        }
        for ( int a : ans ) {
            if ( answer < a ) {
                answer = a;
            }
        }
        return answer;
    }
}

 

2. Python

def solution(friends, gifts):
    answer = 0
    friends_info = {}
    num = len(friends)
    for i in range(num) :
        friends_info[friends[i]] = i
    gift_history = [[0 for col in range(num)] for row in range(num)]
    for g in gifts :
        gg = g.split(" ")
        gift_history[friends_info[gg[0]]][friends_info[gg[1]]] += 1
    gift_degree = [0 for val in range(num)]
    for i in range(num) :
        sum_give = 0
        sum_take = 0
        for j in range(num) :
            sum_give += gift_history[i][j]
            sum_take += gift_history[j][i]
        gift_degree[i] = sum_give - sum_take
    ans = [0 for val in range(num)]
    for i in range(num) :
        for j in range(i+1, num) :
            gift_history_i = gift_history[i][j]
            gift_history_j = gift_history[j][i]
            if (gift_history_i == 0 and gift_history_j == 0) or (gift_history_i == gift_history_j) :
                gift_degree_i = gift_degree[i];
                gift_degree_j = gift_degree[j];
                if gift_degree_i > gift_degree_j :
                    ans[i] += 1
                elif gift_degree_i < gift_degree_j :
                    ans[j] += 1
            elif gift_history_i > gift_history_j :
                ans[i] += 1
            elif gift_history_i < gift_history_j :
                ans[j] += 1
    for a in ans :
        if answer < a :
            answer = a
    return answer

 

반응형