구명보트 문제 풀이 with 그리디
https://school.programmers.co.kr/learn/courses/30/lessons/42885
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 풀이
내 코드 !
def solution(people, limit):
#최대 두명 탑승 가능
ans=0
people.sort()
left=0 #가장 가벼운 사람
right=len(people)-1 #가장 무거운 사람의 인덱스
while left<=right:
if people[left]+people[right]<=limit:
left+=1
right-=1
ans+=1
return ans
문제풀이 생각할점
처음에는 오름 차순한다음에 몸무게가 제일 적은 사람부터 태울 생각을 했는데 이렇게 풀면 비효율적이라는 생각이 들었다. 그게 효율적이라고 생각했는데, 가벼운 사람들끼리 먼저 태우면 나머지 무거운 사람들을 혼자 태우게 되어 보트 수가 증가할 가능성이 높았다.
무거운 사람 우선 처리
그래서 무거운 사람은 추가로 누군가와 함께 태우기 어렵기 때문에 가능한 빨리 처리해야 보트의 수를 줄일 수 있다.
그리디 알고리즘
무거운 사람을 한 번에 처리하고, 그 사람과 가벼운 사람을 태울 수 있는지 확인하는 방식으로 문제 풀기
1)오름 차순 정렬 후
2)가벼운 사람과 무거운 사람 효과적으로 매칭
3)무조건 무거운 사람은 태우는거임 , 조건을 만족하면 가벼운 사람도 태우는거 !
그래서 이에 해당할때, 보트 수를 +1해주면 최적의 보트 수를 구할 수 있다.
끗!
'CS&알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 LV.2] 가장 큰 수 (python 풀이, 시간 초과 해결) (1) | 2025.02.04 |
---|---|
파이썬 코테 함수 정리1 (feat. 프로그래머스) (3) | 2025.02.03 |
[프로그래머스 LV.2] 점프와 순간이동 (feat.그리디) (0) | 2024.11.20 |
[프로그래머스 LV.2] 카펫(feat.완전탐색) (0) | 2024.11.19 |
[프로그래머스 LV.2] 다음 큰 수 (feat. 내장함수 bin()) (0) | 2024.11.19 |