<로직 고민/>
- 일단 제한사항 마지막줄을 보니 lost와 reserve에 같은 번호가 있으면 그 번호는 빼야겠군!
- lost를 for문으로 돌리면서 -1인 수가 reserve에 있으면 lost에서 해당 값을 빼고, 없으면 +1이 있는지 보고 있으면 lost에서 그 값을 빼고 없으면 그냥 둔다
def solution(n, lost, reserve):
answer = 0
for l in lost:
if l in reserve:
lost.remove(l)
elif l-1 in reserve:
lost.remove(l)
reserve.remove(l-1)
elif l+1 in reserve:
lost.remove(l)
reserve.remove(l+1)
answer = n - len(lost)
return answer
- 일단 단순하게 이렇게 풀었는데 첫 번째 예시가 안 풀린다
- 왜 lost에 4가 사라지지 않는 것인가..!!
- if-elif-elif는 일단 별로인 거 같긴 한데 흠....어떻게 풀어야 하지..,,
def solution(n, lost, reserve):
answer = 0
# 낮은 숫자순으로 정렬
lost.sort()
reserve.sort()
# 여벌 가져온 학생이 체육복 도난 당했을 때
new_lost = []
for l in lost:
if l in reserve:
reserve.remove(l)
else:
new_lost.append(l)
lost = new_lost
borrow = []
# -1번 학생한테 빌려주기
for l in lost:
if l-1 in reserve and l not in borrow:
reserve.remove(l-1)
borrow.append(l)
# +1번 학생한테 빌려주기
for l in lost:
if l+1 in reserve and l not in borrow:
reserve.remove(l+1)
borrow.append(l)
answer = n - len(lost) + len(borrow)
return answer
- 조건을 나눴다
- 근데도 11, 13~16번 케이스가 안 풀린다
- 질문하기를 다 뒤져도 나랑 같은 케이스가 없다,,,
- for문을 돌리는 배열을 for문 안에서 삭제하면 제대로 된 값이 안 나온다고 해서 borrow라는 배열을 추가했던 건데, 다른 사람들 푼 거 보니까 reserve를 돌리길래 나도 reserve를 돌리고, +1번 학생의 체육복을 빌려주기 위해 reserve로 for문을 다시 돌리면 이미 빌려준 애를 처리해야 해서 또 배열을 만들든가 해야 하기 때문에 elif로 했더니 통과됐다
- 후............
- 점수가 14점이나 나왔다..!!!
<완성된 풀이/>
def solution(n, lost, reserve):
answer = 0
# 낮은 숫자순으로 정렬
lost.sort()
reserve.sort()
# 여벌 가져온 학생이 체육복 도난 당했을 때
new_lost = []
for l in lost:
if l in reserve:
reserve.remove(l)
else:
new_lost.append(l)
lost = new_lost
for r in reserve:
# -1번 학생한테 빌려주기
if r - 1 in lost:
lost.remove(r - 1)
# +1번 학생한테 빌려주기
elif r + 1 in lost:
lost.remove(r + 1)
answer = n - len(lost)
return answer
<다른 사람 풀이/>
- 천재풀이1
def solution(n, lost, reserve):
new_lost = set(lost) - set(reserve)
new_reserve = set(reserve) - set(lost)
for i in new_reserve:
if i - 1 in new_lost:
new_lost.remove(i - 1)
elif i + 1 in new_lost:
new_lost.remove(i + 1)
return n - len(new_lost)
- 내 코드랑 비슷한데 간결해서 가져와봤다
- 여벌 체육복이 있는데 도난 당한 학생의 경우를 나는 7줄로 풀었는데, 이 사람은 for문 없이 단 2줄로 끝냈다..!
- 그리고 정렬도 안 했다...!!!!
- 정렬할 필요가 없었던 건가..?
- 아닌데 내 코드에서 정렬하는 부분을 빼면 2개의 케이스에서 틀렸다고 나온다
- 아 내 코드는 lost를 for문으로 돌리는 부분이 있어서 틀리는 케이스가 나오나보다
- lost랑 reserve 둘 다 for문 돌리려면 순서가 중요하고, 위 풀이처럼 reserve만 for문 돌리려면 순서는 중요하지 않은 듯!