구명보트

Polla·2023년 3월 1일
0

programmers

목록 보기
54/58
post-thumbnail

프로그래머스 lv2 구명보트 파이썬



💡 문제


사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가
매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의
최솟값을 return 하도록 solution 함수를 작성해주세요.


🥳 해결


생각

1. 최소가 되려면 제일 작은 것과 제일 큰것을 매치시켜 줘야 할듯
2. sort() 후에 pop() 후 +1씩 해주면 되지 않을까?
3. 하나가 남을 시, 종료가 되어야 하니 while() 문 써보자


코드

def solution(people, limit):
    cnt = 0
    people.sort()
    start = 0
    end = len(people) -1
    while start < end:
        if people[start] + people[end] <= limit:
            start +=1
        end -= 1
        cnt += 1
    if start == end:
        cnt += 1        
    return cnt

처음에는 pop() 을 이용해서 풀려고 했다.
20분만에 풀긴 했는데, 효율성 문제에서 막혀버렸다ㅜ
확실히 pop()은 시간이 꽤 걸리는 것 같다...

결국 index로 접근 하는 방식을 사용 했는데, 풀고나니 이걸 간단하게 줄이신 분을 봤다.


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

사실, 전체 길이에서 answer 값을 빼준다는 생각은 스쳐 지나가긴 했지만
왜인지 불가능할 것이라고 판단했던 것이 아쉬웠다.

다음엔 조금 더 정리해보고 풀어야지ㅜ..ㅜ🥹🥹


profile
트러블 슈팅 Blog => https://polla.palms.blog/home

0개의 댓글