구명보트(python)

이민호·2021년 4월 3일
0

나의 풀이

원리: 원리는 간단히 people에 있는 가장큰수와 가장 작은수를 비교해서 limit이하면 score를 +1해준다.

def solution(people, limit):
    people.sort(reverse= True)
    score = 0
    boat = []
    while people:
        p = people.pop(0)
        boat.append(p)
        while True:
            if people and sum(boat) + people[-1] <= limit:
                boat.append(people.pop())
            else:
                break
        if people:
            boat = []
            score += 1
        else:
            score += 1
            break
    return score

이렇게 하면 답은 맞지만 시간 초과가 난다...

다른사람 풀이 deque 이용

from collections import deque
											.
def solution(people, limit):
    boat = 0
    people.sort()
    # 보트는 2명씩만 탈 수 있고 무게 제한도 있음.
    q = deque(people)
 											.
    while q:
            if len(q) >= 2:
                if q[0] + q[-1] <= limit:
                    q.pop()
                    q.popleft()
                    boat += 1
                elif q[0] + q[-1] > limit:
                    q.pop()
                    boat += 1
            else:
                if q[0] <= limit:
                    q.pop()
                    boat += 1
    return boat

나의 풀이와 원리는 같지만 deque를 이용하여 시간을 줄 일 수 있고 좀더 간단하게 풀이하였다.

다른사람 풀이2

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

이것또한 원리는 같지만 훨씬 읽기 편하다.
특히, len(people) - answer로 인해 남은 수에대한 처리가 훨씬 깔끔해졌다.bb

profile
life is fun

0개의 댓글