1. 제출 코드
def solution(participant, completion):
answer = ''
index = 0
participant.sort()
completion.sort()
while index < len(completion):
if participant[index] == completion[index]:
index = index + 1
else:
answer = participant[index]
return answer
if index == len(completion):
answer = participant[-1]
return answer
2. 반성
바로 떠오른 풀이는 remove를 사용해 이름이 같은 선수들을 하나씩 지워 남은 하나의 요소를 반환하는 것이었다. 그러나 이렇게 풀 경우, 원본 배열을 변형시키기 때문인지 for 문이 실행되지 않았다. 그래서 배열을 딥카피하여 원본 배열을 비교하고, 카피된 배열의 요소를 remove하는 방법을 사용했다. 그랬더니 동명이인에 대한 처리가 되지 않았다.
리무브를 포기하고 다른 리스트 매소드를 찾아보니 sort가 있었다. sort는 매개변수를 지정하지 않을 경우 리스트의 요소들을 오름차순으로 정렬해 주는 매소드이다. participant와 completion는 단 하나의 요소 외에 모두 동일하므로, 두 리스트를 오름차순으로 정렬하여 달라지는 부분을 찾으면 되는 것이다. for문을 사용하려고 했으나 range가 떠오르지 않아 위와 같이 조금 복잡한 코드를 제출하게 되었다.
def solution(participant, completion):
answer = ''
index = 0
participant.sort()
completion.sort()
for i in range(len(completion)):
if completion[i] != participant[i]:
answer = participant[i]
return answer
answer = participant[-1]
return answer
for문을 이용한다면 위와 같이 작성할 수 있을 것이다. 두 가지 방법 모두, 정답이 되는 요소가 가장 마지막에 위치하는 경우에는 list의 길이가 맞지 않아 에러가 발생하므로, completion의 길이만큼만 비교한 뒤, 결과가 나오지 않는다면 participant의 마지막 요소가 정답이 된다.
[Python] Programmers lv1 두 정수 사이의 합 (0) | 2021.05.04 |
---|---|
[Python] Programmers lv1 수박수박수박수박수박수? (0) | 2021.05.04 |
[Python] Programmers lv1 가운데 글자 가져오기 (0) | 2021.05.04 |
[Python] Programmers lv1 모의고사 (0) | 2021.05.03 |
[Python] Programmers lv1 K번째 수 (0) | 2021.05.03 |
댓글 영역