https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[문제 풀이]
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
[나의 풀이]
def solution(participant, completion):
for i in completion:
participant.remove(i)
return participant[0]
효율성 테스트에서 실패!!
- 참고: 리스트에서 특정 값 제거
[python] 리스트(list) - 특정 값 제거 list.remove(), del(), pop(), clear() 등
🔍예상 검색어 더보기 # 파이썬 리스트 값제거 # 파이썬 리스트 특정값제거 # 파이썬 리스트 특정값 모두제거 # 파이썬 리스트 특정요소제거 # 파이썬 리스트 특정값 삭제 # 리스트에서 특정 값
lungfish.tistory.com
[다른 풀이]
1)
from collections import Counter
def solution(participant, completion):
count = Counter(participant) # 참가자 이름과 등장 횟수를 저장
for i in completion:
count[i] -= 1 # 완주자의 등장 횟수를 차감
if count[i] == 0:
del count[i] # 등장 횟수가 0이면 키 삭제
return list(count.keys())[0] # 남은 키 반환
* Counter(participant)는 participant의 요소별 등장 횟수를 딕셔너리 형태로 저장합니다.
시간 복잡도
- Counter(participant) 생성 → O(n)
- completion 순회 → O(m)
- 총 시간 복잡도는 O(n + m)으로 훨씬 효율적입니다.
2)
def solution(participant, completion):
participant.sort()
completion.sort()
for p, c in zip(participant, completion):
if p != c: # 불일치하는 이름 찾기
return p
return participant[-1] # 마지막 사람이 완주하지 못함
3)
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
⭐Counter객체 간의 뺄셈
4)
def solution(participant, completion):
answer = '' # 완주하지 못한 사람을 저장할 변수
temp = 0 # 해시값의 합을 저장할 변수
dic = {} # 해시값을 키, 참가자 이름을 값으로 저장하는 딕셔너리
# 1. 참가자의 해시값과 이름을 딕셔너리에 저장하며 해시값의 합 계산
for part in participant:
dic[hash(part)] = part # 해시값을 키로, 이름을 값으로 저장
temp += hash(part) # 해시값을 temp에 더함
# 2. 완주자의 해시값을 temp에서 빼기
for com in completion:
temp -= hash(com) # 완주자의 해시값을 temp에서 차감
# 3. 남은 해시값을 키로 사용해 완주하지 못한 참가자를 찾음
answer = dic[temp]
return answer
'프로그래머스 > 파이썬' 카테고리의 다른 글
💫H-Index_알고리즘(정렬) (0) | 2025.01.31 |
---|---|
의상_알고리즘(해시) (0) | 2025.01.30 |
전화번호 목록_알고리즘(해시) (0) | 2025.01.28 |
기사단원의 무기 (0) | 2025.01.27 |
폰켓몬_알고리즘(해시) (0) | 2025.01.27 |