구명보트
풀이
보고나서 머리로는 어떻게 풀어야겠다 생각되었으나, 코드로 어떻게 해야할지 고민이 되었다.
우선 생각한대로 풀이는
1. 받은 인원을 무게 내림차순으로 정렬한다.
2. 보트를 타야하는데 남은 사람 중 가장 무거운 사람과 가장 가벼운 사람을 태운다.
2-1. 이 때 가장 무거운 사람+ 가벼운 사람 무게가 무게 제한에 걸리면 무거운 사람만 태운다.
3. 다시 2를 반복한다.
4. 2번을 반복한 횟수를 출력한다.
여기서 2번을 구현하려는데 for문을 안될 것 같고, while문을 이용해서 i와 j 인덱스 2개를 사용했다.
이렇게 가장 무거운 쪽에서 그리고 가장 가벼운 쪽에서 각각 진출할 수 있게 만들었다.
# 무게 제한과 최대 2명
# 최대한 적게 사용해 모든 사람 구출
# 몇 번 사용했는지 반환
# 사람의 몸무게와 보트 무게 제한은 40kg~240kg
# 남은 사람 중 가장 무거운 사람과, 가장 가벼운 사람을 같이 데리고 가자.
# 2명을 못 태우고 가면 먼저 무거운 사람 먼저.
def solution(people, limit):
answer = 0
n = len(people)
people_sort = sorted(people, reverse=True)
# 구명 보트에 태울 수 있는 가장 몸무게 많은 사람과 적은 사람을 선택하기
i = 0
j = n-1
count = 0
while i<=j:
# 남은 사람중 가장 무거운 사람과 적은 사람의 합이 limit보다 적으면
if people_sort[i] + people_sort[j] <= limit:
count += 1
i += 1
j -= 1
continue
elif people_sort[i] + people_sort[j] > limit:
count += 1
i += 1
continue
return count
다른 사람 풀이
근본적인 풀이는 내가 생각한 것과 별반 다르지 않은 풀이법이다. 다만 좀 더 간단하다.
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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv2 기능개발 (python) (0) | 2024.01.31 |
---|---|
프로그래머스 Lv2 프로세스(python) (1) | 2024.01.30 |
프로그래머스 Lv1 [1차] 다트 게임 (python) (0) | 2024.01.30 |
프로그래머스 Lv1 부족한 금액 계산하기 (python) (1) | 2024.01.30 |
프로그래머스 Lv2 예상 대진표 (python) (1) | 2024.01.30 |