나의 풀이
def solution(d, budget):
d.sort() # 순서대로 정렬한다. 최대한 많은 부서에 지원할 수 있도록 하기 위함이다.
sum = 0
answer = 0
for i in range(len(d)):
sum += d[i] # 순서대로, 즉 가장 작은 것부터 sum에 합해준다. 최대한 많은 부서에 지원할 수 있도록 하기 위함이다.
if sum > budget:
break
answer += 1
return answer
나의 풀이(완벽한 답이 아니다. 85% 통과율)
def solution(n, lost, reserve):
answer = n - len(lost) # 우선 전체 학생 수에서 체육복을 잃어버린 학생 수를 뺀다.
for i in reserve:
if i in lost: # 만약 여벌의 체육복을 가진 학생이 도난당했다면
answer += 1 # 답에 1 추가
reserve.remove(i) # 그 학생 번호 제거
lost.remove(i) # 그 학생 번호 제거
lost.sort()
reserve.sort()
for i in lost:
for j in reserve:
if abs(i-j) == 1: # 체육복을 건네줄 수 있다면
answer += 1 # 답에 1 추가
reserve.remove(j) # 중복되지 않도록 번호 제거
break # 위 if의 경우라면 다른 검증 과정은 필요 없으므로 탈출
return answer
수정(100% 통과율)
def solution(n, lost, reserve):
answer = n - len(lost)
for i in reserve[:]: # 달라진 점. 리스트의 복사본 사용
if i in lost:
answer += 1
reserve.remove(i)
lost.remove(i)
lost.sort()
reserve.sort()
for i in lost:
for j in reserve:
if abs(i-j) == 1:
answer += 1
reserve.remove(j)
break
return answer
++++ list로 for문 돌면서 remove 할 때 주의할 점!!!!!
참고 사이트 : https://devpouch.tistory.com/110