본문 바로가기

코딩테스트 with PYTHON

[python] 코딩테스트 대비 - 그리디(시뮬레이션 - 조건에 따른 최소 갯수)

문제)

답안코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sys
from collections import deque

#sys.stdin=open("input.txt""r")
n, limit=map(int, input().split())
p=list(map(int, input().split()))
p.sort()#몸무게 정렬

p=deque(p)#리스트를 deque 자료구조로 변경
#deque를 사용하는 이유는 list.pop(0)를 하면
#제거된 맨 자료 뒤에 있는 모든 원소들이 한칸씩 당겨지는 연산을 하기 때문
#deque는 가르키는 포인터가 존재해서 포인터만 이동함.(효율적)

cnt=0#보트 수
while p:#p가 비어있지 않다면 반복
    if len(p)==1:#혼자 남았다면
        cnt+=1#탈출 and 보트 수 증가
        break

    if p[0]+p[-1]>limit:#제한 몸무게 보다 크다면,
       p.pop()#무거운 한명만 탈출
        cnt+=1#보트 수 증가
    else:#제한 몸무게 보다 작다면,
       p.popleft()#가벼운 사람 탈출
       p.pop()#무거운 사람 탈출
        cnt+=1#보트 수 증가
print(cnt)
cs