알고리즘
프로그래머스 42885 - 구명보트
ljw4104
2021. 8. 30. 15:16
첫번째 접근 방법
people 리스트를 sort후 앞 인덱스부터 구명보트를 채워나갈것
=> 이렇게 하면 입출력 예제는 다 통과가 되지만 다음경우는 되지 않는다
[ 100, 500, 500, 900, 950 ] => 위의 알고리즘으로는 4가 나오지만 정답은 3이다. (100, 900), (500, 500), (950)
두번째 접근 방법
일단 가장 많이 태울 수 있는 법은 무게가 가벼운 사람 + 무게가 무거운 사람을 세트로 하여야한다.
people 리스트를 정렬 후 맨 앞과 맨 뒤를 비교한다. (가장 큰 값과 가장 작은 값)
두 개의 합이 100 이하이면 인덱스를 한 칸씩 중앙으로 당겨온다
100이 초과되면 그 다음으로 큰 값과 비교를 한다.
def solution(people, limit):
answer = 0
people.sort()
start, end = 0, len(people) - 1
while start <= end:
answer += 1
if people[start] + people[end] <= limit:
start += 1
end -= 1
return answer