코딩문제풀이/파이썬

[프로그래머스] 완주하지 못한 선수 (파이썬)

오늘밤공부 2023. 3. 16. 10:00
반응형

🗓️ 문제 설명

  • 수많은 마라톤 선수들이 마라톤에 참여하여 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
  • 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 반화하세요.
  • 제한 사항
    • 마라톤 참가자 수는 1명 이상 100,000명 이하
    • completion의 길이 = participant의 길이 - 1
    • 참가자의 이름은 1개 이상 ~ 20개 이하의 알파벳 소문자로 이루어짐
    • 참가자 중 동명이인이 있을 수 있음
  • 입출력 예시
participant completion return
['leo', 'kiki', 'eden'] ['eden', 'kiki'] 'leo'
['marina', 'josipa', 'nikola', 'vinko', 'filipa'] ['josipa', 'filipa', 'marina', 'nikola'] 'vinko'
['mislav', 'stanko', 'mislav', 'ana'] ['stanko', 'ana', 'mislav'] 'mislav'

 

💻 코드

최종 코드

  • 수정사항
    >> 딕셔너리 컴프리헨션에서 반복문을 꺼내 정렬된 참가자와 완주자의 이름을 일대일 비교

 

코드 풀이

 

다른 사람 풀이

더보기

풀이 1번

  1. 5번줄 : collections에서 Counter를 불러와 이름의 개수의 차이를 구함
  2. 6번줄 : 5번줄에서 차이값이 1인 경우만 key 값이 남아있기 때문에 key값을 반환

풀이 2번

  1. 3번줄 : 마지막에 반환할 키값을 저장하는 변수 생성
  2. 4번줄 : 참가자의 해시값:이름을 저장할 딕셔너리 생성
  3. 5~7번줄 : 참가자를 한명씩 꺼내며 해시값으로 dic에 저장하고, temp에 해시값을 더해줌
  4. 8~9번줄 : 완주자를 한명씩 꺼내 temp에서 해시값을 빼줌
                 >> 완주자의 해시값을 반복적으로 빼면 최종적으로 하나의 해시값만 남음
  5. 10번줄 : 해시값에 대한 value를 저장하여 반환

 

⚙️ 시행착오

1차 시도

더보기
  • 정확성 테스트 : 런타임 에러 1개, 실패 1개
  • 효율성 테스트 : 시간초과 1개

 

2차 시도

더보기
  • 수정사항
    >> 5번줄에 딕셔너리 key값을 participant와 completion 내에 있는 이름의 개수 차이로 변경
  • 효율성 테스트 : 시간초과 1개

 

알게된 점

더보기
  • collections.Counter() : Counter함수를 통한 뺄셈이 가능
  • hash() : 해시값을 생성이 가능
반응형