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

2023. 9. 21. 20:49·Algorithm/Programmers
def solution(people, limit):
    boat = []
    people.sort()

    light = people[0]
    idx = 0
    
    for i in range(len(people)-1, -1, -1):
        if idx > i:
            break
        person = people[i]
        if person + light > limit:
            # 가장 가벼운 사람이랑도 못앉으면 혼자 가야지
            boat.append(person)
            continue
        # 가장 가벼운 사람이랑은 같이 앉아갈 수 있다! 그럼 앉아가슈
        if idx < i:
            boat.append(person + light)
            idx += 1
            light = people[idx]
            continue
        # 앉아갈 짝이 없으면 혼자 가렴
        boat.append(person)
    return len(boat)

구명보트 개수가 최소가 되려면 무조건 가장 무거운 사람을 제거해야한다는 사실을 깨달으면 쉬운 문제다!

가장 무거운 사람을 제거하려면? 가장 가벼운 사람과 같이 앉아가게 하면 된다!

 

그냥 그리디 문제로만 알고 풀었는데 알고보니 투포인터 문제라고 하더라!

내 풀이도 어쩌다 보니 포인터를 두개 쓰고 있긴 하다..! (i와 idx)

 

시간 복잡도

for문: O(n)

=> O(n)

 

다른 사람 풀이

- 구명 보트의 개수를 직접 구하지 않고, 커플(같이 앉아가는)의 수 만큼 전체 인원에서 빼주면 된다!

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 # 전체에서 두명이서 앉아가는 배의 숫자만큼을 빼줌

 

'Algorithm > Programmers' 카테고리의 다른 글

[프로그래머스/Python] 베스트앨범  (0) 2023.09.13
[프로그래머스/Python] 의상  (0) 2023.09.12
[프로그래머스/Python] 전화번호 목록  (0) 2023.09.12
[프로그래머스/Python] 뒤에 있는 큰 수 찾기  (0) 2023.09.05
[프로그래머스/Python] 스택/큐  (0) 2023.09.05
'Algorithm/Programmers' 카테고리의 다른 글
  • [프로그래머스/Python] 베스트앨범
  • [프로그래머스/Python] 의상
  • [프로그래머스/Python] 전화번호 목록
  • [프로그래머스/Python] 뒤에 있는 큰 수 찾기
빵빵0
빵빵0
(아직은) 공부하고 정리하는 블로그입니다.
  • 빵빵0
    Hack Your World
    빵빵0
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • Error Handling (7)
      • Project (5)
        • MEV (2)
      • Architecture (0)
        • API (0)
        • Cache (0)
        • 사소한 고민거리 (0)
      • Computer Science (4)
        • Data Structure (2)
        • Database (1)
        • Cloud (0)
        • OS (0)
        • Infra, Network (1)
        • AI (0)
      • Language (10)
        • Go (10)
        • Rust (0)
        • Python (0)
        • Java (0)
      • Algorithm (40)
        • BaekJoon (18)
        • Programmers (7)
        • LeetCode (6)
        • NeetCode (9)
      • SW Books (9)
        • gRPC Up & Running (1)
        • System Design Interview (2)
        • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (6)
        • 블록체인 해설서 (0)
        • 후니의 쉽게 쓴 CISCO 네트워킹 (0)
      • BlockChain (4)
        • Issues (0)
        • Research (4)
        • Tech (0)
      • Own (8)
        • TIR(Today I Read) (3)
        • Personal (2)
        • Novel (0)
        • Memo (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Greedy
    Python
    스택
    Palindrome
    go
    Hash Table
    NeetCode
    BEAKJOON
    BFS
    BaekJoon
    MEV
    context
    golang
    goroutine
    chart
    ethereum
    KBW
    큐
    DP
    백준
    two pointer
    프로그래머스
    LeetCode
    MongoDB
    Programmers
    블록체인
    blockchain
    2024
    candlechart
    EVM
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
빵빵0
[프로그래머스/Python] 구명보트
상단으로

티스토리툴바