✏️ 문제
문제 파악
처음엔 준 사람이랑 받은 사람 구분하려고 { "muzi" : ["frodo", "frodo"] ... } 이런 식으로 딕셔너리 쓰려고 했는데
준 사람과 받은 사람, 서로 받은 선물의 수를 비교할 때 복잡해질 것 같았다.
생각해보니 friends 배열에 이름이 차례대로 들어오고 굳이 이름으로 구분 안해도 될 것 같아서 friends의 인덱스를 활용해 이차원 배열을 사용해서 서로 받은 선물의 수를 비교했다.
코드
def solution(friends, gifts):
people = [[0] * len(friends) for _ in range(len(friends))]
cnt = {} # 선물 지수
gift = [0] * len(friends) # 받는 선물 수
for f in friends:
cnt[f] = 0
for g in gifts:
give, receive = g.split()
people[friends.index(give)][friends.index(receive)] += 1
cnt[give] += 1
cnt[receive] -= 1
for i in range(len(people)):
for j in range(len(people)):
if people[i][j] > people[j][i]:
gift[i] += 1
elif people[i][j] == people[j][i]:
if cnt[friends[i]] > cnt[friends[j]]:
gift[i] += 1
return max(gift)
- 다른 사람의 풀이
def solution(friends, gifts):
f = {v: i for i, v in enumerate(friends)}
l = len(friends)
p = [0] * l
answer = [0] * l
gr = [[0] * l for i in range(l)]
for i in gifts:
a, b = i.split()
gr[f[a]][f[b]] += 1
for i in range(l):
p[i] = sum(gr[i]) - sum([k[i] for k in gr])
for i in range(l):
for j in range(l):
if gr[i][j] > gr[j][i]:
answer[i] += 1
elif gr[i][j] == gr[j][i]:
if p[i] > p[j]:
answer[i] += 1
return max(answer)
'PS > 프로그래머스' 카테고리의 다른 글
[Python] 성격 유형 검사하기 (0) | 2024.11.03 |
---|---|
[Python] 신고 결과 받기 (0) | 2024.11.02 |
[Python] 1번 / 동영상 재생기 (0) | 2024.11.02 |
[Python] 개인정보 수집 유효기간 (1) | 2024.11.02 |
[Python] 10번 / 공원 (0) | 2024.11.02 |