문제 링크
내 풀이 (틀림)
def solution(people, limit):
people.sort(reverse = True)
answer = 0
while people:
remain = limit
count = 0
for i, person in enumerate(people):
if person <= remain:
remain = limit - person
people.remove(person)
count += 1
if count == 2:
break
answer += 1
return answer
다른 풀이
def solution(people, limit):
people.sort() # 사람들의 몸무게를 오름차순으로 정렬
count = 0 # 사용된 구명보트의 개수
# 가장 가벼운 사람과 가장 무거운 사람을 가리키는 인덱스를 초기화
front, end = 0, len(people) - 1
# 모든 사람이 구명보트에 탈 때까지 반복
while front <= end:
# 가장 가벼운 사람과 가장 무거운 사람의 무게 합이 구명보트의 무게 제한보다 작거나 같은 경우
if people[front] + people[end] <= limit:
# 두 사람을 함께 태울 수 있으므로 가장 가벼운 사람을 가리키는 인덱스를 하나 증가시킴
front += 1
# 가장 무거운 사람만 태울 수 있는 경우, 가장 무거운 사람을 가리키는 인덱스를 하나 감소시킴
end -= 1
count += 1 # 어떤 경우든 구명보트의 개수를 하나 증가시킴
return count
출처: https://1ets-just-do-it.tistory.com/129 [파이썬은 신이야🔥🔥🔥:티스토리]
풀이 해석
- 가장 가벼운 사람과 무거운 사람의 인덱스를 초기화 한 후
두명이 모두 탑승할 경우 둘의 인덱스를 변경하고 안될 경우
무거운 사람 한사람만 태우고 인덱스를 줄이는 방식을 사용하였다
배울 점
댓글남기기