프로그래머스 탐욕법(그리디 Greedy) Level 2. 구명보트 파이썬 풀이
문제링크 https://programmers.co.kr/learn/courses/30/lessons/42885#
처음에 while(people)을 사용해 pop하는 방식으로 풀었는데 효율성 1번에서 시간초과가 나서 for문을 사용하는 것으로 바꿨다.
def solution(people, limit):
answer = 0
people = sorted(people) # 오름차순 정렬
a = 0 # 제일 작은 값의 인덱스 (처음)
b = len(people) - 1 # 제일 큰 값의 인덱스 (마지막)
for i in range(len(people)):
if a == b: # 1명 남았을 경우
answer += 1
break
elif a > b: # 사람들을 다 태운경우
break
# 제일 가벼운 사람과 제일 무거운 사람을 태웠을 때 한계보다 작다면 둘 다 태움
if people[a] + people[b] <= limit:
answer += 1
a += 1
b -= 1
# 아니라면 제일 무거운 사람만 혼자 태움
else:
b -= 1
answer += 1
return answer