조건
기록을 비교하여
1. 기록이 존재할 경우 => 더 많이 준 사람의 선물 개수 +1
2. 기록이 존재하지 않는 경우 or 주고 받은 선물의 개수가 같은 경우 => 선물 지수가 더 큰 사람의 선물 개수 +1
3. 선물 지수까지 동일한 경우 => 선물을 주고 받지 않음
풀이
입출력 예시에 친절하게 표가 나와있어 쉬운 문제긴 했다.
먼저 주고 받은 선물 2차원 표, 선물 지수 1차원 리스트를 선언한다.
선물 기록 리스트인 gifts를 돌며 준 사람, 받은 사람의 idx를 찾아
1) 준 사람은 선물 지수 + 1
2) 받은 사람은 선물 지수 - 1
3) 선물 2차원 표에 기록 ([준 사람 인덱스][받은 사람 인덱스])
를 기록한다.
이후 2차원 표를 이중 for문으로 돌며 조건에 맞는 경우를 따져 최댓값을 찾는다.
def solution(friends, gifts):
l = len(friends)
scores = [0] * l # 선물 지수 리스트
presents = [[0 for _ in range(l)] for _ in range(l)] # 주고 받은 선물 2차원 리스트
answer = 0
for g in gifts:
A, B = g.split()
aidx = friends.index(A)
bidx = friends.index(B)
scores[aidx] += 1 # 선물 준 경우 선물 지수 + 1
scores[bidx] -= 1 # 선물 받은 경우 선물 지수 -1
presents[aidx][bidx] += 1 # 주고 받은 선물 갱신
for i in range(l):
tmp = 0
for j in range(l):
if i == j:
continue
else:
Sub = presents[i][j] - presents[j][i]
if Sub > 0:
tmp += 1
continue
elif Sub == 0:
# 기록 없는 경우 || 주고 받은 수가 같은 경우 => 선물 지수 비교
if scores[i] > scores[j]:
tmp += 1
answer = max(tmp, answer)
return answer
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Lv.2 _ [PCCP 기출문제] 2번 / 석유 시추 (0) | 2025.01.18 |
---|---|
[Programmers] Lv.2 _ [PCCP 기출문제] 3번 / 충돌 위험 찾기 (0) | 2025.01.06 |
[Programmers] Lv.2 _ [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 (0) | 2025.01.05 |