본문 바로가기
프로그래머스/lv.2

구명보트

by bingual 2024. 2. 5.
반응형

 

https://school.programmers.co.kr/learn/courses/30/lessons/42885

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제풀이

추억의 강 건너기 문제. 보통은 오름차 정렬을하고 가벼운 사람들 부터 차례대로 태우는것 부터 풀이를 생각하겠지만 최대한 가벼운 사람과 무거운 사람을 함께 태우는것이 문제 해결의 최적의 해이다.

문제에서 [40, 40, 160, 160, 240] 해당 테스트 케이스를 추가 해보자.

최대한 가벼운 사람과 무거운 사람을 함께 태우는 로직

from collections import deque


def solution(people, limit):
    answer = 0

    people.sort()
    people = deque(people)

    while people:
        if len(people) >= 2 and people[0] + people[-1] <= limit:
            people.pop()
            people.popleft()
        else:
            people.pop()
        answer += 1

    return answer

print(solution([70, 50, 80, 50], 100)) # 3
print(solution([70, 80, 50], 100)) # 3
print(solution([40, 40, 160, 160, 240], 200)) # 3

 


최대한 가벼운 사람들 부터 함께 태우는 로직

from collections import deque


def solution(people, limit):
    answer = 0

    people.sort()
    stack = deque()

    for item in people:
        stack.append(item)

        if len(stack) >= 2:
            if stack[-1] + stack[-2] <= limit:
                stack.pop()
                stack.pop()
                answer += 1
            else:
                stack.pop()
                stack.pop()
                answer += 2

    answer += len(stack)

    return answer

print(solution([70, 50, 80, 50], 100)) # 3
print(solution([70, 80, 50], 100)) # 3
print(solution([40, 40, 160, 160, 240], 200)) # 4



새로 추가한 테스트 케이스에서 결과가 달라지는것을 확인 할 수 가 있다.

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

N개의 최소공배수  (0) 2024.02.05
예상 대진표  (0) 2024.02.05
점프와 순간 이동  (0) 2024.02.05
영어 끝말잇기  (0) 2024.02.05
카펫  (2) 2024.02.04