티스토리 뷰

알고리즘

[프로그래머스] Greedy 문제 구명보트

도라지보다더덕 2020. 3. 1. 21:41

프로그래머스 문제풀러가기

 

프로그래밍 강의 | 프로그래머스

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

import collections 

def solution(people, limit):

    answer = 0
    _people = collections.deque(sorted(people))

    while _people and _people[-1] > limit - 40:         #무게 넘는 사람 탈출
            answer += 1
            _people.pop()

    while _people:
        light = _people.popleft()
        if not _people:
            answer += 1

        while _people:         
            heavy = _people.pop()
            if light + heavy <= limit:       #가볍, 무겁 탈출
                answer += 1
                break
            elif not _people:
                answer += 2
                break
            else: 
                answer += 1       #무거운 사람만 탈출

    return answer

    


   
    무게 순으로 정렬 후 가장 가벼운, 무거운 사람들 매칭해서 탈출시켰습니다~
       양 무게 끝단을 비교하느라 양방향에서 데이터를 처리할 수 있는 자료구조가 필요했는데 
    collections.deque()가 있길래 사용했습니다. 양 끝단 데이터를 삽입, 삭제하는데 효율성이 좋다고 하네요
    그럼 collections.deque()를 알아봅시다.

     


    Collections.deque
    deque란 double ended queue로 양방향에서 데이터 조작이 가능한 queue 입니다. 
    먼저 스택처럼 사용하기 위한 메소드로는
    deque.append(x)
    deque.pop()
    deque.extend(iterable)
    

   처럼 우측 기준으로 삽입 삭제되는 것들이 있고 만약 큐처럼 왼쪽 기준으로 활용하려면 left를 추가로 써주면 됩니다
    deque.appendleft(x)
    deque.popleft()
    deque.extendleft(iterable)

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함