[프로그래머스] 구명보트 (Python)

박현우·2021년 1월 25일
0

프로그래머스

목록 보기
17/34

문제

구명보트

문제 해설

처음에 생각한 것은 리스트에서 2개의 조합을 구해 limit를 넘지 않는 경우의 수를 모두 구하고 가장 많은 쪽을 택하려 했지만 구현이 너무 어렵고, 조합을 구한 후 제외시켜야 하기 때문에 리스트도 따로 만들어 체크해야 하기 때문에 메모리 낭비가 어마어마하다. 좀 더 쉽게 생각한 것이 다음과 같다.

  1. 리스트를 정렬한다.
  2. start와 end를 가리키는 index를 설정한다.
  3. 두 숫자를 더해 limit를 넘으면 end-1, 넘지 않으면 start와 end를 1씩 좁혀준다.

소스 코드

def solution(people, limit):
    people = sorted(people)
    answer = len(people)
    start = 0
    end = len(people) - 1
    if end == 0:
        return 1
    else:
        while start < end:
            tot = people[start] + people[end]
            if tot > limit:
                end -= 1
            else:
                answer -= 1
                start += 1
                end -= 1
    return answer

0개의 댓글