๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€(BOJ)

[ ํŒŒ์ด์ฌ(python) ] ๋ฐฑ์ค€ 17952 - ๊ณผ์ œ๋Š” ๋๋‚˜์ง€ ์•Š์•„!

by YWTechIT 2021. 7. 12.
728x90

๐Ÿ“ ๋ฐฑ์ค€ 17952 - ๊ณผ์ œ๋Š” ๋๋‚˜์ง€ ์•Š์•„!

๋ฌธ์ œ: ๋ฐฑ์ค€ 17952 - ๊ณผ์ œ๋Š” ๋๋‚˜์ง€ ์•Š์•„!


๐Ÿ’ก ๋‚˜์˜ ํ’€์ด

  1. flag[0]์ด 0์ธ ๊ฒฝ์šฐ์™€ 1์ธ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆ„์–ด ์ž‘์„ฑํ–ˆ๋‹ค.
  2. flag[0]๊ฐ€ 0์ผ ๋•Œ stack์ด ์กด์žฌํ•˜๋ฉด ๋งจ ๋’ค์—๋ถ€ํ„ฐ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜์—ฌ 0์ธ ๊ฒฝ์šฐ์—๋Š” score์— ์ถ”๊ฐ€ํ•˜๊ณ  0์ด ์•„๋‹Œ๊ฒฝ์šฐ์—๋Š” ์‹œ๊ฐ„์ด ํ๋ฅด๊ฒŒ -= 1์„ ํ•ด์ค€๋‹ค.
  3. flag[0]๊ฐ€ 1์ด๋ฉด, ๊ณผ์ œ๋ฅผ ๋ฐ›์ž๋งˆ์ž ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— -1์„ ํ•ด์ค€ ์ƒํƒœ๋กœ ๋„ฃ๋Š”๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์ง€ ์•Š๋”๋ผ๋„ ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ๊นŒ ์ฝ”๋“œ๋ฅผ ๋ฐ˜์ ˆ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋ฐ”๋กœ ์‹œ๊ฐ„๊ณผ ์ ์ˆ˜ ๋ณ€์ˆ˜๋ฅผ ๊ฐ๊ฐ ์„ ์–ธํ•˜๊ณ  ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

  1. flag[0]์ด 1์ธ ๊ฒฝ์šฐ๋งŒ ๊ณ ๋ คํ•œ๋‹ค
  2. ๋งŒ์•ฝ, flag[0]์ด 1์ด๋ผ๋ฉด score์™€ time์— ๊ฐ๊ฐ ํ•ด๋‹น ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
  3. time์— ๊ฐ’์ด ๋‚จ์œผ๋ฉด time -= 1์„ ํ•˜๊ณ  time์˜ ๊ฐ’์ด 0์ด๋ฉด ํ•ด๋‹น score๋ฅผ result์— ๋„ฃ๋Š”๋‹ค.
  4. time๊ณผ score๋ฅผ pop ํ•œ๋‹ค.

 

๋‘ ๋ฒˆ์งธ ํ’€์ด ๋ฐฉ๋ฒ•์„ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ดค๋‹ค. ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ ๋œ๋‹ค๋ฉด ์ฐธ๊ณ ํ•˜์ž.

 

 

# ์ฒซ๋ฒˆ์งธ ํ’€์ด๋ฐฉ๋ฒ•
import sys
input = sys.stdin.readline

n = int(input())
stack = []
total_score = 0

for _ in range(n):
    flag = list(map(int, input().split()))

    if not flag[0]:  # 0
        if stack:    
            if not stack[-1][1]:    # `stack[-1]` ์‹œ๊ฐ„์ด 0์ด๋ฉด
                total_score += stack[-1][0]    # ์ ์ˆ˜ ์ถ”๊ฐ€
                stack.pop()    

            else:    # `stack[-1]` ์‹œ๊ฐ„์ด ๋‚จ์•„ ์žˆ์œผ๋ฉด
                stack[-1][1] -= 1    # ์‹œ๊ฐ„์ด ํ๋ฅธ๋‹ค.
                if not stack[-1][1]:    # ์‹œ๊ฐ„์ด ํ๋ฅด๊ณ  ๋‚˜์„œ 0์ด๋ฉด
                    total_score += stack[-1][0]    # ์ ์ˆ˜ ์ถ”๊ฐ€
                    stack.pop()

    else:  # 1 ? ?
        score = flag[1]
        time = flag[2]
        project = [score, time - 1]
        stack.append(project)

        if stack:
            if not stack[-1][1]:
                total_score += stack[-1][0]
                stack.pop()

print(total_score)

 

# ๋‘๋ฒˆ์งธ ํ’€์ด๋ฐฉ๋ฒ•
import sys
input = sys.stdin.readline

n = int(input())
score, time = [], []
result = []

for _ in range(n):
    flag = list(map(int, input().split()))

    if flag[0]:    # ์ž…๋ ฅ์ด 1 ? ? ์ธ ๊ฒฝ์šฐ
        score.append(flag[1])
        time.append(flag[2])

    if time:
        time[-1] -= 1
        if not time[-1]:
            result.append(score.pop())
            time.pop()

print(sum(result))

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€