문제
https://school.programmers.co.kr/learn/courses/30/lessons/42885
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다.
예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다.
구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다.
사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return 하도록 solution 함수를 작성해주세요.
제한사항
- 무인도에 갇힌 사람은 1명 이상 50,000명 이하입니다.
- 각 사람의 몸무게는 40kg 이상 240kg 이하입니다.
- 구명보트의 무게 제한은 40kg 이상 240kg 이하입니다.
- 구명보트의 무게 제한은 항상 사람들의 몸무게 중 최댓값보다 크게 주어지므로 사람들을 구출할 수 없는 경우는 없습니다.
입출력 예
People | Limit | Return |
[70, 50, 80, 50] | 100 | 3 |
[70, 80, 50] | 100 | 3 |
문제풀이
이 문제는 그리디 알고리즘으로 풀 수 있었습니다. 프로그래머스 문제 카테고리가 그리디로 되어있어서 쉽게 접근할 수 있었던 것 같습니다.. ㅎ 그렇다면 그리디로 어떻게 풀 수 있을까요?
2022.07.18 - [알고리즘/개념] - [파이썬으로 배우는 알고리즘] 그리디(Greedy) 알고리즘
[파이썬으로 배우는 알고리즘] 그리디(Greedy) 알고리즘
그리디(Greedy) 알고리즘이란? Greedy는 '탐욕스러운'이라는 뜻을 가진 단어로 탐욕 알고리즘이라고도 불리며 말 그대로 선택의 순간마다 당장 좋은 것만 고르는 방법을 의미합니다. 순간의 가장 좋
c4u-rdav.tistory.com
문제 조건을 잘 생각해봅시다. 구명보트에는 최대 2명이 탑승할 수 있고, 2명의 무게가 제한된 무게를 초과할 경우 2명 모두 탑승할 수가 없습니다. 이 조건을 생각해서 가장 무거운 사람을 우선으로 보트에 태웁니다. 여기서 가장 가벼운 사람을 함께 태웠을 때 무게 제한을 넘지 않으면 2명을 탑승해서 보내면 되고, 같이 탑승했을 때 무게 제한을 넘는다면 가장 무거운 사람만 보내면 됩니다. 어차피 가장 무거운 사람은 누구와도 같이 탑승할 수 없을 거니까요!
이 과정을 반복하면 보트를 최소화하여 사람들을 구출할 수 있습니다.
구현
코드
from collections import deque
def solution(people, limit):
answer = 0
people.sort()
people = deque(people)
cnt = 0
while people:
# 가장 무거운 사람 무게 + 가장 가벼운 사람 무게가 무게 제한을 넘지 않는 경우
# 가장 가벼운 사람도 포함
if len(people) >= 2 and people[0] + people[-1] <= limit:
people.popleft()
people.pop()
cnt += 1
answer = cnt
return answer
결과
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스(Programmers)/ Level3] N으로 표현 (파이썬, Python3) (0) | 2022.07.06 |
---|---|
[프로그래머스(Programmers)/ Level2] N개의 최소공배수 (파이썬, Python3) (0) | 2022.07.01 |
[프로그래머스(Programmers)/ Level3] 블록 이동하기 (파이썬, Python3) (0) | 2022.06.30 |
[프로그래머스(Programmers)/ Level2] 기능개발 (파이썬, Python3) (0) | 2022.06.30 |