[프로그래머스 lv 2] 구명보트 (탐욕법(Greedy))

2025. 3. 3. 18:48·✨ 공부 기록/알고리즘

아이디어 : 작은 순으로 정렬한 후에 2명씩 태워보면 되지 않을까 싶다.

 

# 첫 번째 시도

def solution(people, limit):
    answer = 0

    people.sort()
    people.append(0)
    flag = 0
    
    for i in range(0,len(people)-1,2):
        if people[i]+people[i+1] <= limit:
            answer+=1
        else:
            flag = i
            break
    answer += len(people)-1-flag
    
    return answer

 

그런데 고려하지 못했던 부분은, 작은 순대로 차례로 넣는게 아니라 큰수와 작은 수를 잘 조합하면 limit을 넘기지 않을 수 있다는 것이다. 예를 들면 [10, 20, 30, 40, 50, 60, 70, 80], limit=90 -> return 4와 같은 테스트케이스를 생각해볼 수 있다.

 

# 두 번째 시도

 

  • 구명보트의 무게 제한은 항상 사람들의 몸무게 중 최댓값보다 크게 주어지므로 사람들을 구출할 수 없는 경우는 없습니다.
def solution(people, limit):
    answer = 0
    flag = 0
    people.sort(reverse=True)

    for i in range(len(people)):
        if people[i]+people[-1]>limit:
            answer+=1
        else:
            flag = i
            break

    people = people[i:]
    people.sort()
    
    if len(people)%2==0:
        answer+=len(people)/2
    else:
        answer+=(len(people)//2)+1
    
    return answer

 

그런데도 안되긴 한다. 어떤 경우를 빠뜨린 걸까? 테스트케이스 여러개를 시도해보았지만 잘 모르겠다.

-> 만약 [10, 30, 30, 30, 40, 40], 40와 return 5로 두면 실패한다. 왜냐하면 현재는 제일 작은 값과 큰 값들과의 합만 고려하고 있기 때문에, 제일 처음 값만 작고 중간값이 큰 경우에는 더할 수가 없기 때문이다.

 

# 세 번째 시도(성공)

def solution(people, limit):
    answer = 0
    flag = 0
    people.sort()

    left=0
    right=len(people)-1
    while left < right:
        if people[left]+people[right]<=limit:
            answer+=1
            left+=1
            right-=1
        else:
            right-=1
    answer += len(people)-answer*2
    return answer
저작자표시 비영리 변경금지 (새창열림)

'✨ 공부 기록 > 알고리즘' 카테고리의 다른 글

[프로그래머스 lv 0] 옹알이 (1) (코딩테스트 입문)  (0) 2025.03.04
[프로그래머스 lv 1] K번째수 (정렬)  (0) 2025.03.03
[프로그래머스 lv 1] 체육복 (탐욕법(Greedy))  (0) 2025.03.02
[프로그래머스 lv 2] 주식가격 (스택/큐)  (0) 2025.03.02
[프로그래머스 lv 2] 프로세스 (스택/큐)  (0) 2025.02.28
'✨ 공부 기록/알고리즘' 카테고리의 다른 글
  • [프로그래머스 lv 0] 옹알이 (1) (코딩테스트 입문)
  • [프로그래머스 lv 1] K번째수 (정렬)
  • [프로그래머스 lv 1] 체육복 (탐욕법(Greedy))
  • [프로그래머스 lv 2] 주식가격 (스택/큐)
LaonMoon
LaonMoon
  • LaonMoon
    스토리생성연구블로그
    LaonMoon
  • 전체
    오늘
    어제
  • 공지사항

    • About me👋
    • 분류 전체보기
      • ✨ Story Generation
        • 논문 리뷰
        • 연구 관련 생각
      • ✨ 자연어 처리
        • (짧은) 논문 리뷰
        • HuggingFace
        • Transformer 구현
      • ✨ 공부 기록
        • 알고리즘
        • 딥러닝
        • 웹 개발
        • Flutter
        • Flask
        • Android
        • NLP
        • Docker&k8s
        • Database
        • [24-1] 데이터 분석
        • [24-1] RL
      • ✨ 포트폴리오
        • 2020
        • 2021
        • 2022
        • 2023
        • 2024
      • 프로그래밍
        • 오류(Error)정리
        • 시행착오
        • 리눅스 명령어
        • 공부내용 정리
      • AI Playground
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LaonMoon
[프로그래머스 lv 2] 구명보트 (탐욕법(Greedy))
상단으로

티스토리툴바