PS/프로그래머스

[Python] 구명보트

s_omi 2024. 11. 8. 09:23
728x90
반응형
SMALL

✏️ 문제

 

문제 파악

처음엔 배열에 pop()을 해서 len(people)의 값이 0이 될 때 while 반복문을 끝내는 방향으로 짰는데 pop(0) 메소드를 실행하면 0 인덱스 뒤에 있는 요소들이 인덱스를 다시 배정받아야하는데 이때 많은 시간이 소요되어 효율성 테스트 1번에서 시간초과가 떴다.

 

그래서 배열의 내용을 건들이지 않는 투 포인터 알고리즘으로 풀었따.

 

 

코드

  • 시간초과 풀이
def solution(people, limit):
    answer = 0
    people.sort()
    
    while len(people) > 0:
        # 최소 몸무게 이하
        if limit - 39 < people[-1]:
            answer += 1
            people.pop()
            continue
            
        # 1명만 남음
        if len(people) == 1:
            answer += 1
            break

        # 한 보트에 최대 두명
        if limit >= (people[0] + people[-1]):
            people.pop(0)
        answer += 1
        people.pop()
        
    return answer
  • 성공한 풀이
def solution(people, limit):
    answer = 0
    people.sort()
    left, right = 0, len(people) - 1
    
    while left <= right:
        if people[left] + people[right] <= limit:
            left += 1  

        right -= 1  
        answer += 1  
        
    return answer

 

728x90
반응형
LIST

'PS > 프로그래머스' 카테고리의 다른 글

[Python] 카펫  (1) 2024.11.08
[Python] 영어 끝말잇기  (0) 2024.11.08
[Python] 점프와 순간 이동  (0) 2024.11.07
[Python] 가장 많이 받은 선물  (0) 2024.11.03
[Python] 성격 유형 검사하기  (0) 2024.11.03