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
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 프로그래머스 ( Programmers )' 카테고리의 다른 글
[프로그래머스(Programmers)][Java,Python] (Lv2) 연속 부분 수열 합의 개수 (0) | 2025.04.02 |
---|---|
[프로그래머스(Programmers)][Java,Python] (Lv2) 귤 고르기 (0) | 2025.04.02 |
[프로그래머스(Programmers)][Java,Python] (Lv1) 택배 상자 꺼내기 (2025 프로그래머스 코드챌린지 2차 예선) (0) | 2025.03.31 |
[프로그래머스(Programmers)][Java,Python] (Lv1) 동영상 재생기 (PCCP 기출문제 1번) (0) | 2025.03.26 |
[프로그래머스(Programmers)][Java,Python] (Lv1) 공원 (PCCE 기출문제 10번) (0) | 2025.03.25 |