def solution(n, lost, reserve):
for i in lost[:] :
if i in reserve :
lost.remove(i)
reserve.remove(i)
for i in lost[:] :
if i-1 in reserve :
lost.remove(i)
reserve.remove(i-1)
elif i+1 in reserve :
lost.remove(i)
reserve.remove(i+1)
return n - len(lost)
1. 처음 for문으로 lost, reserve 두 리스트에 들어가있는 학생들을 제거해준다.
2. 두번째 for문으로는 lost에 남아있는 학생의 번호 앞(먼저) 또는 뒤 번호의 학생이 체육복 여벌을 들고왔다면 lost, reseve에서 제거해준다.
3. n(총 학생의 수)에서 lost 길이(체육복이 없는 학생의 수)를 빼준다.
처음에 코드를 작성할 때 for i in lost[:] : 에서 [:] 가 없는 for i in lost : 로 돌렸더니 lost의 리스트가 하나씩 누락되어 for문이 돌아가는 경우가 발생했다.(예를 들면 lost = [2, 4, 6, 8]이면 4와 8이 for문으로 안돌아감)
알아보니 for문을 돌면서 for문을 조작하기 때문이다. 만약 2 차례에서 elif 문에서 2가 remove되면서 [4, 6]이 되긴 하지만,
for 문에서는 이미 읽혔던 [2, 4, 6] 때문에 순서가 당겨지면서 다음차례 순서인 [4, 6]에서의 6이 들어오게 된다.
'Algorithm > Programmers' 카테고리의 다른 글
[Python] 비밀지도 (0) | 2021.04.30 |
---|---|
[Python] 키패드 누르기 (0) | 2021.04.29 |
[Python] 자릿수 더하기 (0) | 2021.04.27 |
[Python] 약수의 합 (0) | 2021.04.27 |
[Python] 시저 암호 (0) | 2021.04.26 |