문제
풀이
이 문제를 정리하면 다음과 같습니다.
1. 참가자(participant), 완주자(completion) 2개의 리스트가 존재
2. completion의 크기는 participant의 크기보다 1 작음.
3. 완주하지 못한 사람 1명의 이름을 return
저는 위의 조건을 보고 단순히 participant와 completion을 직접 비교 후 같은 값이 존재하면 리스트의 값을 삭제한 후 마지막에 남는 값을 출력하면 되는 간단한 문제라고 생각했습니다. 그래서 아래 코드와 같은 방식으로 풀이를 진행했습니다.
def solution(participant, completion):
answer = ''
for i in completion:
for j in participant:
if (i == j):
participant.remove(i)
break
answer = participant[0]
return answer
이렇게 풀이를 하니 테스트 케이스는 모두 통과하였으나 효율성 테스트에서 모두 시간 초과가 되어버렸습니다. 그래서 다른 방법으로 풀이를 진행해야 할 것 같아 다른 풀이를 참고해보니 리스트 내의 n번째 값을 직접 비교해서 푸는 방법이 있다는 것을 알게되었습니다. 제가 이해한 방식은 다음과 같았습니다.
1. 각 리스트를 정렬한다.
2. 정렬을 하게되면 completion에 존재하지 않는 이름이 나오기 전까지는 participant와 completion의 n번째 값은 같다.
3. participant[n] 과 completion[n]을 비교한 후, 값이 다르면 바로 participant[n]을 리턴, 마지막까지 모두 비교하였을때 다른 값이 없으면 participant의 마지막 값을 리턴
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if(completion[i] != participant[i]):
return participant[i]
return participant[len(participant)-1]
}
위의 방식으로 풀이를 진행하니 정확성과 효율성 테스트 모두 통과하는 코드를 작성할 수 있었습니다.
'Algorithm > Python, C++' 카테고리의 다른 글
[프로그래머스] 없는 숫자 더하기 (python) (0) | 2022.08.17 |
---|---|
[프로그래머스] 로또 최고 순위와 최저 순위 (python) (0) | 2022.08.15 |
백준 1181_단어정렬 [C++] (0) | 2022.07.19 |
백준 11651_좌표 정렬하기 2 [C++] (0) | 2022.07.18 |
백준 11650_좌표 정렬하기 [C++] (0) | 2022.07.16 |
댓글