Algorithm/Programmers

[Python] 체육복

느낌표 공장장 2021. 4. 27. 23:48
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