본문 바로가기
Algorithm/programmers

[프로그래머스] 42576 | 완주하지 못한 선수

by 밤초록 2022. 1. 5.
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 객체 빼기 가능 -> 생각보다 여러가지 기능이 있어 정리할 예정
반응형

댓글