프로그래머스 코딩테스트 고득점 Kit -
탐욕법(Greedy)
- Lv 2. 구명보트 (Python)
https://school.programmers.co.kr/learn/courses/30/lessons/42885
def solution(people, limit):
answer = 0
people = sorted(people) # 정렬해서 (가벼운 사람 + 무거운 사람) 조합으로 최적의 해를 구해야함
start = 0
end = len(people) - 1
while (start <= end):
# 무게 제한보다 크다면 -> 마지막 인덱스를 가르키는 end 한칸 앞으로 당겨와서 그 다음 무거운 사람으로 비교
if (people[start] + people[end] > limit):
answer += 1
end -= 1
# 무게 제한을 넘지 않는다면 -> 최대 2명이 타게 됨 (가벼운 사람 + 무거운 사람)
else:
answer += 1
start += 1 # 그 다음 가벼운 사람
end -= 1 # 그 다음 무거운 사람
return answer
앞에서부터 가벼운 사람 + 뒤에서부터 무거운 사람
조합으로 보트를 태워야한다.start
와 end
변수를 사용해서 투포인터로 해결하였다.start
는 맨 앞인 0부터, end
는 맨 뒤인 len(people) - 1
부터 시작한다.start
가 end
를 넘어가게 되면 모든 사람을 다 태우게 된 것이므로 탈출 (while문의 조건)limit
과 비교한다 !limit
보다 크면 → start
에 있는 사람은 못타고 우선 end
에 있는 사람만 혼자 보트를 타서 보냄 → end
값만 1 빼준다.limit
보다 작으면 → 최대 2명 탈 수 있는 보트에 [start
에 있는 사람 + end
에 있는 사람] 이렇게 둘 조합으로 타서 보냄 → end
값도 1 빼주고 start
는 1 더해주어 다음 비교를 진행한다.