1. 완주하지 못한 선수
문제
코드
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
return participant[-1]
참가한 선수들과 완주한 선수들이 각각 담긴 리스트가 2개 주어진다.
먼저, 두 리스트를 sort함수로 정렬해준다.
그 후 for문으로 둘을 비교하며 완주한 선수 목록에 없는 선수를 찾아줘야 한다.
for문의 반복 횟수는 완주한 선수 리스트의 길이로 한다.
참가한 선수 리스트의 길이로 할 경우 완주한 선수 리스트에는 없는 index로의 접근이 발생할 수 있다.
반복문 안의 if문으로 정렬된 두 리스트를 비교하여 서로 다를 때 참가자 리스트의 해당 index 값을 출력하고
참가자 리스트의 가장 마지막 인덱스의 값이 답일 경우를 고려해 인덱스가 -1인 값을 리턴해주는 코드도 추가했다.
참고 : https://coding-grandpa.tistory.com/85
2. 전화번호 목록
문제
코드
def solution(phone_book):
answer = True
phone_book.sort()
for i in range(len(phone_book)-1):
if phone_book[i+1].startswith(phone_book[i]):
answer = False
break
return answer
전화번호부 목록 중 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 출력해야 한다.
일단 phone_book 리스트에 번호들이 정렬되어 있지 않으므로 sort 함수로 정렬한다.
정렬을 했으므로 길이가 짧은 전화번호가 앞쪽 index에 위치하고 연속된 index의 관계에서 다른 번호의 접두어인 경우를 발견할 것이라고 예측 가능하다.
for문을 phone_book 리스트의 길이 -1 만큼 반복하고 if문을 넣어 다음 인덱스의 값 접두어가 해당 인덱스의 값인지 비교해준다.
이 때 startswith을 썼다.
이 함수는 문자열이 특정문자로 시작하는지 여부를 true, false로 반환해준다.
인자에 string값과 tuple만 올 수 있다.
if문이 true일 경우 answer 값을 false로 바꿔주고 break문을 써줬다.
참고 : 너무 다양한 블로그를 봤는데 링크를 복사 안 해둬서 다시 찾으면 적겠다.
3. 위장
문제
코드
def solution(clothes):
dic = {}
for name, kind in clothes:
if kind not in dic:
dic[kind]=1
else:
dic[kind]+=1
answer = 1
for i in dic.values():
answer*=(i+1)
return answer-1
clothes라는 2차원 배열이 주어진다. 2열에는 의상의 종류가 1열에는 의상의 이름이 들어가는 2열 n행 배열입니다.
같은 종류인 의상은 하나만 입을 수 있다는 사실을 기억하며 딕셔너리를 활용해줍시다.
딕셔너리 하나를 생성합니다. for문과 if문으로 딕셔너리에 의상의 종류마다 옷이 몇 개 있는지 저장해줍니다.
결과를 출력할 때 모두 입지 않는 경우를 빼줍니다.
참고 : https://it-garden.tistory.com/388
4. 베스트앨범
문제
코드
from collections import defaultdict
def solution(genres, plays):
answer = []
dic = defaultdict(int)
result = defaultdict(list)
i=0
for g,p in zip(genres,plays):
dic[g] += p
result[g].append((i,p))
i += 1
dic = sorted(dic.items(), key= lambda x:x[1], reverse = True)
for b in dic:
result_1 = sorted(result[b[0]], key=lambda x:x[1], reverse = True)
answer.append(result_1[0][0])
if len(result_1) > 1:
answer.append(result_1[1][0])
return answer
defaultdict를 활용해줍니다. defaultdict는 딕셔너리의 초기값을 생성해줍니다.
장르와 플레이 수를 반복문으로 zip으로 묶어 반복하면서 딕셔너리 두 개에 각각 값을 추가해줍니다.
dic 이라는 이름의 딕셔너리는 어떤 장르가 플레이 수가 가장 많은지 장르끼리 비교하기 위해 사용합니다.
result라는 이름의 딕셔너리는 장르 안에서의 각 음악 index와 플레이 수를 저장해주기 위해 사용합니다.
반복문을 한 번 돌린 후 dic 딕셔너리를 내림차순으로 정렬해줍니다.
두 번째 반복문은 베스트 앨범에 최종으로 값을 넣어주기 위해 내림차순으로 result의 값을 정렬합니다.
또 안의 if문을 통해 플레이 수가 같을 경우 고유 번호가 낮은 값을 append 해줍니다.
참고 : https://soohyun6879.tistory.com/113
'Programming > Python' 카테고리의 다른 글
[프로그래머스] 힙(Heap) - 더 맵게 (Python3, 파이썬) (0) | 2022.01.30 |
---|---|
[프로그래머스] 스택/큐 - 주식가격 (Python3, 파이썬) (0) | 2022.01.29 |
[프로그래머스] 스택/큐 - 다리를 지나는 트럭 (Python3, 파이썬) (0) | 2022.01.29 |
[프로그래머스] 스택/큐 - 프린터 (Python3, 파이썬) (0) | 2022.01.29 |
[프로그래머스] 스택/큐 - 기능개발 (Python3, 파이썬) (0) | 2022.01.29 |