CS/알고리즘
[그리디]구명보트
erase-jeong
2024. 3. 19. 00:22
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42885
✔️ 소요된 시간
1시간
✨ 수도 코드
0. 문제에서 주어진 상태
1. 몸무게 순서대로 정렬한다.
2. 가장 무거운 사람을 태운다.
3. 최대 2명을 태울 수 있으므로 남은 자리에 태울 수 있는 사람을 알아본다.
- 가장 가능성이 높은 사람은 가장 무게가 작은 사람이므로, 가장 몸무게가 작은사람과 가장 몸무게가 많은 사람의 합이 제한을 넘지 않는지 확인한다.
- 제한을 넘지 않는다면 두 명을 태운다.
- 제한을 넘으면, 가장 무거운 사람 혼자 태운다.
- 3. 최대 2명을 태울 수 있으므로 남은 자리에 태울 수 있는 사람을 알아본다.
소스코드
def solution(people, limit):
count=0
people.sort()
start=0
end=len(people)-1
while start<=end:
if people[start]+people[end]<=limit:
start+=1
end-=1
else:
end-=1
count+=1
return count
- start와 end는 이미 정렬된 리스트에서 가장 무게가 작은사람과 많은 사람을 나타내는 인덱스
- if 무게가 적은사람과 무게가 많은 사람의 합이 제한 무게보다 적게 나가면 start, end 를 변경.
- else 무게가 적은사람과 무게가 많은 사람의 합이 많이나가면 무거운사람 혼자만 태우므로 end만 변경
📚 새롭게 알게된 내용
- 문제의 조건을 꼼꼼히 읽어야겠다고 생각, 처음에 최대 2명인지 확인안하고 문제 품.
- 참고한 블로그 : https://jongwoon.tistory.com/100