[프로그래머스 LV.1] 완주하지 못한 선수 — Python 정답 & 해설

2026. 6. 22. 00:17·코딩테스트/알고리즘

🔗 1. 문제 URL

https://school.programmers.co.kr/learn/courses/30/lessons/42576

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 


 

📝 2. 문제 요구사항 정리

마라톤에 참여한 선수들의 이름이 담긴 participant와 완주한 선수들의 이름이 담긴 completion이 주어졌을 때, 완주하지 못한 선수 한 명의 이름을 찾아 반환하는 문제입니다.

  • 입력: participant에는 전체 참가자 이름이, completion에는 완주한 선수 이름이 담겨 있습니다.
  • 조건: completion의 길이는 participant보다 1 작고, 참가자 중에는 동명이인이 있을 수 있습니다.
  • 반환값: 완주하지 못한 선수의 이름을 반환합니다.

 


 

💡 3. 핵심 개념

✔ 1) 이름별 등장 횟수 세기

이 문제에서는 같은 이름을 가진 참가자가 있을 수 있기 때문에 단순히 이름이 존재하는지만 확인하면 안 됩니다. 각 이름이 participant에 몇 번 등장했는지를 딕셔너리에 저장해야 합니다.

✔ 2) 완주자 명단을 기준으로 카운트 줄이기

participant를 순회하며 이름별 인원 수를 세어 둔 뒤, completion을 순회하면서 완주한 선수의 카운트를 하나씩 줄입니다. 이렇게 하면 완주한 사람은 0이 되고, 완주하지 못한 사람만 양수로 남게 됩니다.

✔ 3) 남은 값이 있는 이름 반환하기

마지막으로 딕셔너리를 순회하면서 값이 0보다 큰 이름을 찾으면 됩니다. 문제에서 완주하지 못한 선수는 정확히 한 명이라고 했으므로, 해당 이름을 발견하는 즉시 반환할 수 있습니다.

 


 

✅ 4. 정답 Python 코드

def solution(participant, completion):
    person = {}
    
    for name in participant:
        person[name] = person.get(name, 0) + 1
        
    for name in completion:
        person[name] -= 1
        
    for name in person:
        if person[name] > 0:
            return name

 


 

💬 5. 풀이하면서 느낀 점

처음에는 참가자 명단과 완주자 명단의 차이를 단순히 비교하면 된다고 생각할 수 있는데, 풀이를 정리하다 보니 같은 이름이 여러 번 등장할 수 있다는 조건이 핵심이라는 점을 떠올릴 수 있었습니다.

그래서 participant를 먼저 순회하며 이름별 인원 수를 딕셔너리에 저장하고, completion을 순회하면서 완주한 사람 수를 하나씩 줄이는 방식으로 풀었습니다. 마지막에 값이 0보다 큰 이름이 완주하지 못한 선수이므로 바로 반환할 수 있었습니다.

또한, collections.Counter를 사용하면 같은 아이디어를 더 짧게 표현할 수도 있다는 점을 이후에 생각해볼 수 있었습니다.

 

궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요.

도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊

'코딩테스트 > 알고리즘' 카테고리의 다른 글

[프로그래머스 LV.0] 등수 매기기 — Python 정답 & 해설  (0) 2026.06.22
[프로그래머스 LV.0] 문자열 밀기 — Python 정답 & 해설  (0) 2026.06.19
[프로그래머스 LV.2] 괄호 회전하기 — Python 정답 & 해설  (0) 2026.06.16
[프로그래머스 LV.0] 유한소수 판별하기 — Python 정답 & 해설  (1) 2026.06.13
[프로그래머스 LV.0] 배열 만들기 2 — Python 정답 & 해설  (0) 2026.06.11
'코딩테스트/알고리즘' 카테고리의 다른 글
  • [프로그래머스 LV.0] 등수 매기기 — Python 정답 & 해설
  • [프로그래머스 LV.0] 문자열 밀기 — Python 정답 & 해설
  • [프로그래머스 LV.2] 괄호 회전하기 — Python 정답 & 해설
  • [프로그래머스 LV.0] 유한소수 판별하기 — Python 정답 & 해설
작지만 꾸준한 성장으로
작지만 꾸준한 성장으로
contact
  • 작지만 꾸준한 성장으로
    파랑새
    작지만 꾸준한 성장으로
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • IT (3)
      • 코딩테스트 (23)
        • 알고리즘 (12)
        • MYSQL (11)
      • 패션 (0)
      • 독후감 (0)
      • TIL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    와이드 포맷 롱 포맷
    데이터 전처리 파이프라인
    프로그래머스 lv.1
    프로그래머스 lv.0
    파이썬코테
    모델 추론
    mysql
    Python
    SWEA
    파이썬
    코테
    프로그래머스 lv.2
    Programmers
    sql 코딩테스트
    데이터베이스
    Pandas pivot
    자바
    코딩테스트
    Pandas melt
    long format
    프로그래머스
    wide format
    python3
    알고리즘
    백준
    CPU Bound
    데이터 리모델링
    공공데이터 전처리
    Pandas groupby agg
    I/O Bound
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
작지만 꾸준한 성장으로
[프로그래머스 LV.1] 완주하지 못한 선수 — Python 정답 & 해설
상단으로

티스토리툴바