프로그래머스 lv2 구명보트 파이썬
사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return 하도록 solution 함수를 작성해주세요.
1. 최소가 되려면 제일 작은 것과 제일 큰것을 매치시켜 줘야 할듯 2. sort() 후에 pop() 후 +1씩 해주면 되지 않을까? 3. 하나가 남을 시, 종료가 되어야 하니 while() 문 써보자
def solution(people, limit):
cnt = 0
people.sort()
start = 0
end = len(people) -1
while start < end:
if people[start] + people[end] <= limit:
start +=1
end -= 1
cnt += 1
if start == end:
cnt += 1
return cnt
처음에는 pop()
을 이용해서 풀려고 했다.
20분만에 풀긴 했는데, 효율성 문제에서 막혀버렸다ㅜ
확실히 pop()
은 시간이 꽤 걸리는 것 같다...
결국 index
로 접근 하는 방식을 사용 했는데, 풀고나니 이걸 간단하게 줄이신 분을 봤다.
def solution(people, limit) :
answer = 0
people.sort()
a = 0
b = len(people) - 1
while a < b :
if people[b] + people[a] <= limit :
a += 1
answer += 1
b -= 1
return len(people) - answer
사실, 전체 길이에서 answer
값을 빼준다는 생각은 스쳐 지나가긴 했지만
왜인지 불가능할 것이라고 판단했던 것이 아쉬웠다.
다음엔 조금 더 정리해보고 풀어야지ㅜ..ㅜ🥹🥹