현제의 현재이야기

[백준/python] 17952 - 과제는 끝나지 않아 본문

algorithm

[백준/python] 17952 - 과제는 끝나지 않아

현재의 현제 2022. 6. 25. 15:29

첫번째 try:

from collections import deque

n = int(input())
scores = []
time = 0
result = 0
resister = []

for i in range(n):
    a = deque(map(int, input().split()))
    if a[0] == 1:
        if time == 0:
            time = a[2] - 1
            scores.append(a[1])
            if time == 0:
                result += scores.pop()   
        else:
            resister.append(time)
            time = a[2] - 1
            scores.append(a[1])
            if time == 0:
                result += scores.pop()   
    else:
        if time == 0:
            result += scores.pop()
            time = resister.pop()
        else:
            time -= 1
            if time == 0:
                result += scores.pop()   

print(result)

>>시간초과

scores = []
time = []
result = 0

n = int(input())

for _ in range(n):
    a = list(map(int, input().split()))
    if a[0] == 1:
        scores.append(a[1])
        time.append(a[2])
        time[-1] -= 1
        if time[-1] == 0:
            result += scores.pop()
            time.pop()
    else:
        if len(time) == 0:
            continue
        time[-1] -= 1
        if time[-1] == 0:
            result += scores.pop()
            time.pop()
print(result)

파이썬으로는 시간초과나서 파이파이로 했더니 됐다.

| 알고리즘

  1. 만약 입력받은 리스트 맨 앞 요소가 1이면 스코어하고 시간을 각각 리스트에 넣는다
  2. 그리고 받은 즉시 시간이 -1 됨으로 -1 한번 해주고
  3. 그리고 최근에 넣은 과제의 시간이 0이 되면 스코어를 팝하고 결과에 더해준다.
  4. 만약에 리스트 맨 앞 요소가 0이면

time 이 다 비어있으면 time[-1]에서 오류가 뜨기 때문에 continue문을 넣음

  1. 최근 time에 -1을 해주고 똑같이 해당 과제를 다 끝내면 점수를 더해주고 시간도 없애줘서 다음 과제의 시간을 처리하게 한다.
Comments