programmers.co.kr/learn/courses/30/lessons/42576?language=python3
코딩테스트 연습 - 완주하지 못한 선수
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수
programmers.co.kr
< problem >
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
< constraints >
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
< example >

example 01)
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
example 02)
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.
example 03)
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.
< solution ① >
participant 배열 값의 수만큼 for문 반복하며, participant가 completion에 포함되지 않는 값 확인하여 return
ⓒ ⓞ ⓓ ⓔ

ⓣ ⓔ ⓢ ⓣ

동명이인이 존재할 경우, 인지하지 못하고,
null값을 return하게 되어 코드 수정 필요
participant와 completion을 모두 정렬 시킨 후 비교 수행
1) participant[i]와 completion[i]가 같지 않다면, participant[i] return
2) 마지막까지 participant와 completion의 값이 모두 같다면, participant[maxNum] return
* len(completion) 계산 반복해서 하면 번거로울 것 예상하여 maxNum 변수 생성 *
ⓒ ⓞ ⓓ ⓔ

ⓣ ⓔ ⓢ ⓣ


효율성은 모두 통과했지만, 정확성에서 실패하여 코드 수정 필요
len(participant) == 1 인 경우 고려하지 않음
이 부분 코드 고려하여 코드 수정
ⓒ ⓞ ⓓ ⓔ

ⓣ ⓔ ⓢ ⓣ


< solution ② > zip( ) 활용
participant와 completion 배열 정렬 후 반복문 수행
zip( ) 함수 활용하여, 반복문에서 각 배열의 값을 p와 c에 저장
if 두 값이 같지 않다면 participant의 값이 저장된 p return
else: participant.pop( ): participant 배열의 수가 1인 경우
ⓒ ⓞ ⓓ ⓔ

ⓣ ⓔ ⓢ ⓣ


오히려 이전 코드의 효율성이 조금 더 높다고 판단됨
이전에 알게된 함수 활용해볼 수 있어서 좋았음
ⓕ ⓘ ⓝ ⓐ ⓛ ⓒ ⓞ ⓓ ⓔ

'Python ◡̈ > 차근차근 Python' 카테고리의 다른 글
[백준 python] 10718 We love kriii (0) | 2021.04.30 |
---|---|
[백준 python] 2557 Hello World (0) | 2021.04.30 |
[programmers] python Hash 전화번호목록 (0) | 2021.04.29 |
[programmers] python Hash 위장 (0) | 2021.04.28 |
[programmers] python DFS_BFS 타겟넘버 (0) | 2021.04.07 |