remove()가 리스트원본을 훼손시키는 경우, 반복문이 비정상적인 동작(요소를 건너 뜀)을 간과했음
여기서 뱅글뱅글 돌았음..
[hint]
1) 첫 번째 틀림 : 코드가 오름차순으로 진행되니까, 아래서부터 처리해야함.
2) 두 번째 틀림 : ????? -> 누군가 sort를 써보라 했는데, 다른 문제가 더 생겨났다?
3) 세 번째 틀림 : ????? -> 한창 찾다가 remove가 문제였음을 알았음
사실, 내 방식대로 하면, sort가 의미가 없음.
대신 효율성이 매우 떨어짐..
나는 lost에 중점을 두었지만, 다른 분들은 reserve에 중점을 둔 듯
이후에는 이 코드를 개선해봐야겠다.
1) reserve 중심
2) 효율성 개선
풀이 코드
1) lost와 reserve의 중복 인원은 모두 제거 : 여기서 문제가 생김..
2) 나머지 처리
ㄴ lost인 것과 아닌 것으로 구분되므로
ㄴ lost면 체육복을 빌리거나 못 빌리거나
ㄴ lost 아니면, 체육복이 있는 상태 + 여분이 있는 상태 + 체육복을 잃어버렸으나 여분이 있는 상태 이므로 +1 한다.
count = 0 # 수업듣는 사람
# 제거 (중복을 먼저 제거)
for j in lost[:]:
if j in reserve[:]:
lost.remove(j)
reserve.remove(j)
# 그 다음에 나머지 처리
for i in range(1,n+1):
if i in lost: # 잃어버림 # 여분 옷이 없음
if i-1 in reserve:
count += 1
lost.remove(i)
reserve.remove(i-1)
elif i+1 in reserve:
count += 1
lost.remove(i)
reserve.remove(i+1)
else:
count += 1 # 안 잃어버림
return count
'취업 > 알고리즘이야' 카테고리의 다른 글
[지금 하고 있는 것] (0) | 2022.04.06 |
---|---|
파이썬 함수를 생각없이 쓰면 피를 본다 (0) | 2022.04.06 |
그리디 (0) | 2022.04.06 |
remove 반복문 주의 (0) | 2022.04.06 |
헷갈림 : enumerate / iterator / generator (0) | 2022.04.02 |