def solution(people, limit):
people.sort()
boat = 0
r = len(people) -1
l = 0
while l < r :
if people[l] + people[r] <= limit :
boat += 1
r -= 1
l += 1
else :
boat += 1
r -= 1
return boat + 1 if l == r else boat
풀이
투 포인터 방식으로 해결한 문제이다.
제일 무거운 사람 + 제일 가벼운 사람의 무게를 구하면서 그에 따라 보트를 추가해나가는 방법이다.
처음엔 pop을 이용하여 문제를 풀었는데, 효율성 테스트에서 통과하지 못해서 포인터 값을 조절하면서 리스트 인덱스에서 가져오는 방식을 이용하니 통과하였다.
1. 만약 두 사람의 무게가 limit을 넘지 않았을 경우, 보트를 추가하고 r, l을 다음 값으로 이동한다.
2. limit을 넘었을 경우, 보트를 추가하고 r만 다음 값(덜 무거운 사람)으로 이동한다.
3. people이 홀수인 경우에는 한 사람이 남기때문에 보트를 추가해준다. (마지막엔 l과 r의 값이 같아짐)
'Algorithm > Programmers' 카테고리의 다른 글
[Python] 이진 변환 반복하기 (0) | 2021.06.13 |
---|---|
[Python] 프렌즈4블록 (0) | 2021.06.11 |
[Python] 카펫 (0) | 2021.06.07 |
[Python] 큰 수 만들기 (0) | 2021.06.06 |
[Python] 다리를 지나는 트럭 (0) | 2021.06.04 |