문제
감자튀김을 좋아하는 박 모 씨와 다르게, 성우는 감자튀김을 그렇게 좋아하지는 않는다. 어느 날 박 모 씨와 성우는 수많은 감자튀김을 받게 되었고, 이를 나누어 가지기로 했다.
책상 위에 N개의 접시가 놓여있다.
i번째 접시에는 aNi개의 감자튀김이 있다. 박 모 씨와 성우는 다음 행동을 번갈아 시행한다.
책상 위에 남아있는 접시 하나를 고르고, 접시와 그 위에 놓인 모든 감자튀김을 가져간다.
이는 책상 위의 접시가 모두 사라질 때까지 반복한다. 맨 처음 접시를 가져가는 사람은 박 모 씨다.
박 모 씨는 가져가는 감자튀김의 양을 최대화하려 하고, 성우는 가져가는 감자튀김의 양을 최소화하려 한다. 두 사람이 항상 최선의 행동을 한다고 가정할 때, 성우와 박 모 씨가 최종적으로 가져가는 감자튀김의 양을 구하여라.
입력
첫 번째 줄에 접시의 개수
N이 주어진다.
두 번째 줄에 각 접시에 있는 감자튀김의 개수 공백으로 구분되어 주어진다.
출력
첫 번째 줄에 성우가 가져가는 감자튀김의 양과 박 모 씨가 가져가는 감자튀김의 양을 공백으로 구분하여 출력한다.
풀이
N = int(input())
potato = list(map(int, input().split()))
a, b = 0, 0
potato.sort()
while potato :
try :
a += potato.pop()
b += potato.pop(0)
except IndexError :
break
print(b, a)
기존에는 for문을 이용했고, 했지만 시간초과가 났다.
두번째로 deque를 사용하여 풀이를 성공할 수 있었다.
하지만 위처럼 보다 간단하게(?) 풀이가 가능한 것 같다요~
제출 코드
import sys
from collections import deque
input = sys.stdin.readline
n = int(input().strip())
potato = list(map(int, input().split()))
potato.sort()
potato = deque(potato)
s, p = 0, 0
for i in range(n):
if(i%2 != 0):
s += potato.popleft()
else:
p += potato.pop()
print(s, p)
문제 출처
'코테정복💫 > 파이썬 PYTHON' 카테고리의 다른 글
[프로그래머스/Python] 폰켓몬 (2) | 2024.01.07 |
---|---|
[프로그래머스/Python] 완주하지 못한 선수 (2) | 2024.01.04 |
[백준/Python] 15649번 N과 M (1) (2) | 2023.12.12 |
[백준/Python] 14916번 거스름돈 (2) | 2023.12.11 |
[백준/Python] 2346번 풍선 터뜨리기 (0) | 2023.12.04 |