Algorithm/Programmers

[Python] 구명보트

느낌표 공장장 2021. 6. 10. 23:36
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