42576 | 완주하지 못한 선수 | Lv.1
https://programmers.co.kr/learn/courses/30/lessons/42576

문제 핵심
- 단 한명의 선수만 마라톤을 미완주
작성 코드
완주자 반복문을 돌면서 참여자 배열에서 del
def solution(participant, completion):
answer = []
for com in completion:
del participant[participant.index(com)]
return participant[0]
- 정확도는 통과하였으나 시간 초과로 효율성을 통과하지 못하였습니다
- for 반복문 내에서, del 연산을 수행한 것이 감점 요소
Counter 객체를 이용 - 하나하나 값 계산
def solution(participant, completion):
counter = Counter(participant)
for comp in completion:
counter[comp] -= 1
answer = [per for per in counter if counter[per]==1]
return answer[0]
- 정확도, 효율성 모두 통과하였으나 결과 도출 과정이 미흡
이상 코드
해시 함수 이용
def solution(participant, completion):
answer = ''
temp = 0
dic = {}
for part in participant:
dic[hash(part)] = part
print(dic)
temp += int(hash(part))
print(temp)
for com in completion:
temp -= hash(com)
answer = dic[temp]
return answer
- 해시 함수를 이용한 문제 요구에 맞는 정석 풀이
정렬하여 비교
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]
- 한 학생만 미완주한 것이기 때문에 두 배열을 정렬 후 비교, completion의 for문을 다 돌았는데도 미완주 인원이 없을 경우엔 participant의 마지막 선수가 미완주한 것 ( len(participant) == len(completion) + 1 )
Counter 객체 사용 - 빼기
def solution(participant, completion):
return list((Counter(participant) - Counter(completion)).keys())[0]
학습
- 문제 조건을 따져 여러가지 방법으로 풀기 가능
- Counter 객체 빼기 가능 -> 생각보다 여러가지 기능이 있어 정리할 예정
반응형
'Algorithm > programmers' 카테고리의 다른 글
| [프로그래머스] 62048 | 멀쩡한 사각형 (0) | 2022.02.08 |
|---|---|
| [프로그래머스] 42579 | 베스트앨범 (0) | 2022.01.18 |
| [프로그래머스] 42578 | 위장 (0) | 2022.01.17 |
| [프로그래머스] 68935 | 3진법 뒤집기 (0) | 2022.01.11 |
| [프로그래머스] 42577 | 전화번호 목록 (0) | 2022.01.07 |
댓글