본문 바로가기
코딩 공부/프로그래머스

프로그래머스 _ 구명보트

by 밍망몽멍뭉 2021. 4. 5.

두 번째 면접을 보고 왔는데 .. 내가 분명 알고있는 지식인데 말로써 설명하려고 하니 진짜 내가 모르는것 마냥... 대답하게되는.. 아닌가.. 나는 모르나..? ㅋㅋㅋㅋㅋ 내 머릿속에서 정리가 안되어있으니 원..

시원시원하게 기술적으로 대답하고 싶은데 그걸 못해서 답답하다..

빅데이터 분석기사 시험 준비하면서 꼼꼼히 데이터 분석 프로세스 같은 이론적인 부분들을 내 언어로 만드는 연습을 해야겠다!

 

그리하여 오늘 푼 문제..

빡치면 코딩 문제 풀게 되는 변태같은 나...

 

구명 보트!!!

 

문제는 다음과 같다.

 

 


 

제한사항

  • 무인도에 갇힌 사람은 1명 이상 50,000명 이하입니다.
  • 각 사람의 몸무게는 40kg 이상 240kg 이하입니다.
  • 구명보트의 무게 제한은 40kg 이상 240kg 이하입니다.
  • 구명보트의 무게 제한은 항상 사람들의 몸무게 중 최댓값보다 크게 주어지므로 사람들을 구출할 수 없는 경우는 없습니다.

 

 


>> 내 접근

people을 sort 해서.. 맨 윗값과 아래값을 더해서 limit가 넘으면 무거운 애 혼자타고

아니면 같이 타고~ 해서 최적 방법을 만들기

 

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

 

 

>> deque로 접근해보고자 했다..

from collections import deque
def solution(people, limit):
    people.sort()
    cnt = 0
    deque_p = deque(people)
    
    while deque_p:
        left = deque_p.popleft()
        
        right = deque_p.pop()
        if left + right > limit:
            deque_p.appendleft(left)
        cnt +=1
    return cnt
        
            

근데..

 

 

이런 에러 메시지가!

 

그래서

 

from collections import deque

def solution(people, limit):
    result = 0
    deque_people = deque(sorted(people))

    while deque_people: # 덱이 빌때까지덱이 빌때까지
        left = deque_people.popleft()
        if not deque_people: # 빈문자열을 not 으로 돌리면 참이므로 if를 돌릴 수 있다.
            return result + 1 # 또한 인원수가 1일수 있으므로
        right = deque_people.pop()
        if left + right > limit:
            deque_people.appendleft(left)
        result += 1
    return result

deque가 더 이해하긴 쉬운듯?!?!