개발/algorithm
[프로그래머스][level2] 구명보트 -python
zzi_on2
2022. 2. 4. 17:11
문제 링크
풀이
- 그리디는 문제를 어떻게 풀지 다양한 아이디어를 고려해보아야 하는데 그걸 생각해내는 게 너무 어렵다. ..
그리디 문제도 계속 풀면서 익혀야지 ..
- 이번 문제의 아이디어는
가장 큰 무게와 가장 작은 무게의 합이 limit보다 작다면 둘 다 태우고
limit 보다 크면 큰 무게만 태운다는 것
- deque 를 사용해서 풀었다
from collections import deque
def solution(people, limit):
# people 을 오름차순 정렬해서 deque 에 넣는다
q = deque(sorted(people))
# 보트 개수
answer = 0
while q:
# 길이가 1이면 보트 개수 +1 을 하고 끝
if len(q) == 1 :
answer += 1
break
# 가장 큰 무게와 가장 작은 무게의 합이 limit보다 작거나 같으면
# 가장 큰 무게와 가장 작은 무게가 한 보트에 탈 수 있다면
if q[0] + q[-1] <= limit:
# 큐에서 둘 다 제거
q.pop()
q.popleft()
else:
# 큰 무게만 제거
q.pop()
# 보트 수 + 1
answer += 1
return answer
+ 2022.04.21
- 배열로 풀이
def solution(people, limit):
answer = 0
people.sort()
start =0
end = len(people) -1
s = 0
while start <= end :
# 가장 큰 것과 가장 작은 것 둘 다 태울 수 있으면
if people[start] + people[end] <= limit :
# 둘 다 태움
start +=1
end -=1
# 아니면 큰 것만 태움
else :
end -=1
answer += 1
return answer