1. 완주하지 못한 선수 (Lv. 1)
# 완주하지 못한 선수
def solution(participant, completion):
info = {}
for i in participant:
if info.get(i):
info[i] += 1
else:
info[i] = 1
for i in completion:
info[i] -= 1
answer = ''
for i, num in info.items():
if num != 0:
answer = i
break
return answer
동명이인이 있기 때문에 {참가자 이름 : 이름 숫자} 쌍의 info선언
완주한 사람들의 숫자를 한명씩 줄인다.
남은 info에서 숫자가 0이 아는 이름이 완주를 하지 못한 사람의 이름이다.
2. 전화번호 목록 (Lv. 2)
# 전화번호 목록
def solution(phone_book):
dictionary = dict()
for number in phone_book:
for i in range(1, len(number)+1):
x = number[:i]
if dictionary.get(x):
if i == len(number):
return False
if dictionary[x] == 2:
return False
else:
dictionary[x] = 1
if i == len(number):
dictionary[x] = 2
return True
각 전화번호의 앞에서부터 하나씩 늘려가면서 dictionary에 1을 추가해준다. 단, 마지막일 경우 2를 추가
ex) 119 = {'1' : 1, '11' : 1, '119' : 2}
만약, 해당 번호가 dictionary에 있고 그 숫자가 2이면, 어떠한 번호가 현재 번호의 접두어이다. (return Fasle)
만약, 해당 번호가 dictionary에 있고 마지막까지의 전체 번호라면, 현재 번호가 어떠한 번호의 접두어이다. (return True)
그 외에는 전부 접두어관계가 없다. (return True)
3. 위장 (Lv. 2)
# 위장
def solution(clothes):
answer = 1
items = dict()
for _, where in clothes:
if items.get(where):
items[where] += 1
else:
items[where] = 1
for _, num in items.items():
answer *= (num+1)
answer -= 1
return answer
각 부위별로 위장의 개수를 items딕셔너리에 저장해준다.
ex) {'face' : 3, 'hand' : 2}
해당 위장의 개수를 각각 1을 더하고 전부 곱한다. (위장을 착용할 수도 있고 착용하지 않을 수도 있으므로)
최소 한개의 위장을 착용해야 하므로 -1 (전부 착용하지 않은 경우의 수를 빼준다.)
4. 베스트 앨범 (Lv. 3)
# 베스트 앨범
def solution(genres, plays):
info = [[]for _ in range(len(genres))]
for i in range(len(plays)):
info[i] = [genres[i], plays[i], i]
info.sort(key=lambda x: (-x[1], x[2]))
hash = dict()
for genre, number, index in info:
if hash.get(genre):
hash[genre][0] += number
hash[genre][1] += [index]
else:
hash[genre] = [number, [index]]
result = []
for x in hash.values():
result.append(x)
result.sort(reverse=True)
answer = []
for _, sings in result:
answer.append(sings[0])
if len(sings) >= 2:
answer.append(sings[1])
return answer
info리스트에 [장르, 플레이수, 노래의 고유ID]를 각각 넣어준다.
플레이수가 높은순서로, ID가 낮은 순서로 정렬
hash에 각 장르의 플레이수를 더해가며 각 장르에 속한 ID를 배열로 저장한다.
hash = { 장르 : [플레이 수, [노래의 ID들]] }
result에 hash의 value만을 빼와서 총 플레이수가 높은 순서로 정렬
result = [플레이 수, [노래의 ID들]]
노래의 ID가 2개 이상이면 앞에서 2개를 아니면 앞에서 1개를 answer에 순서대로 append
answer 출력
'Algorithm > 프로그래머스 고득점 Kit' 카테고리의 다른 글
[프로그래머스] 고득점Kit (6) - 그리디(1) (파이썬) (0) | 2022.03.05 |
---|---|
[프로그래머스] 고득점Kit (5) - 완전탐색 (파이썬) (0) | 2022.03.04 |
[프로그래머스] 고득점Kit (4) - 정렬 (파이썬) (0) | 2022.03.04 |
[프로그래머스] 고득점Kit (3) - 힙 (파이썬) (0) | 2022.03.02 |
[프로그래머스] 고득점Kit (2) - 스택/큐 (파이썬) (0) | 2022.03.01 |