ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] ๋ฐฑ์ค€ 2841 ์™ธ๊ณ„์ธ์˜ ๊ธฐํƒ€ ์—ฐ์ฃผ (Stack)
    ๐Ÿ’ป Algorithm/Python 2022. 7. 2. 15:13

     

    ๐Ÿ“Œ ๋ฌธ์ œ

    ์ƒ๊ทผ์ด์˜ ์ƒ์ƒ์˜ ์นœ๊ตฌ ์™ธ๊ณ„์ธ์€ ์†๊ฐ€๋ฝ์„ ์ˆ˜์‹ญ์–ต๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์–ด๋Š ๋‚  ์™ธ๊ณ„์ธ์€ ๊ธฐํƒ€๊ฐ€ ์น˜๊ณ  ์‹ถ์—ˆ๊ณ , ์ธํ„ฐ๋„ท์—์„œ ๊ฐ„๋‹จํ•œ ๋ฉœ๋กœ๋””๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ๋‹ค. ์ด์ œ ์ด ๊ธฐํƒ€๋ฅผ ์น˜๋ ค๊ณ  ํ•œ๋‹ค.

     

    ๋ณดํ†ต ๊ธฐํƒ€๋Š” 1๋ฒˆ ์ค„๋ถ€ํ„ฐ 6๋ฒˆ ์ค„๊นŒ์ง€ ์ด 6๊ฐœ์˜ ์ค„์ด ์žˆ๊ณ , ๊ฐ ์ค„์€ P๊ฐœ์˜ ํ”„๋ ›์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ํ”„๋ ›์˜ ๋ฒˆํ˜ธ๋„ 1๋ฒˆ๋ถ€ํ„ฐ P๋ฒˆ๊นŒ์ง€ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค.

     

    ๋ฉœ๋กœ๋””๋Š” ์Œ์˜ ์—ฐ์†์ด๊ณ , ๊ฐ ์Œ์€ ์ค„์—์„œ ํ•ด๋‹นํ•˜๋Š” ํ”„๋ ›์„ ๋ˆ„๋ฅด๊ณ  ์ค„์„ ํŠ•๊ธฐ๋ฉด ์—ฐ์ฃผํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, 4๋ฒˆ ์ค„์˜ 8๋ฒˆ ํ”„๋ ›์„ ๋ˆ„๋ฅด๊ณ  ํŠ•๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์–ด๋–ค ์ค„์˜ ํ”„๋ ›์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋ˆ„๋ฅด๊ณ  ์žˆ๋‹ค๋ฉด, ๊ฐ€์žฅ ๋†’์€ ํ”„๋ ›์˜ ์Œ์ด ๋ฐœ์ƒํ•œ๋‹ค.

     

    ์˜ˆ๋ฅผ ๋“ค์–ด, 3๋ฒˆ ์ค„์˜ 5๋ฒˆ ํ”„๋ ›์„ ์ด๋ฏธ ๋ˆ„๋ฅด๊ณ  ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ด๋•Œ, 7๋ฒˆ ํ”„๋ ›์„ ๋ˆ„๋ฅธ ์Œ์„ ์—ฐ์ฃผํ•˜๋ ค๋ฉด, 5๋ฒˆ ํ”„๋ ›์„ ๋ˆ„๋ฅด๋Š” ์†์„ ๋–ผ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์†๊ฐ€๋ฝ์œผ๋กœ 7๋ฒˆ ํ”„๋ ›์„ ๋ˆ„๋ฅด๊ณ  ์ค„์„ ํŠ•๊ธฐ๋ฉด ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ 2๋ฒˆ ํ”„๋ ›์˜ ์Œ์„ ์—ฐ์ฃผํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด, 5๋ฒˆ๊ณผ 7๋ฒˆ์„ ๋ˆ„๋ฅด๋˜ ์†๊ฐ€๋ฝ์„ ๋—€ ๋‹ค์Œ์— 2๋ฒˆ ํ”„๋ ›์„ ๋ˆ„๋ฅด๊ณ  ์—ฐ์ฃผํ•ด์•ผ ํ•œ๋‹ค.

     

    ์ด๋ ‡๊ฒŒ ์†๊ฐ€๋ฝ์œผ๋กœ ํ”„๋ ›์„ ํ•œ ๋ฒˆ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ๋–ผ๋Š” ๊ฒƒ์„ ์†๊ฐ€๋ฝ์„ ํ•œ ๋ฒˆ ์›€์ง์˜€๋‹ค๊ณ  ํ•œ๋‹ค. ์–ด๋–ค ๋ฉœ๋กœ๋””๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์†๊ฐ€๋ฝ์˜ ๊ฐ€์žฅ ์ ๊ฒŒ ์›€์ง์ด๋Š” ํšŒ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

    ์ž…๋ ฅ

    ์ฒซ์งธ ์ค„์— ๋ฉœ๋กœ๋””์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์Œ์˜ ์ˆ˜ N๊ณผ ํ•œ ์ค„์— ์žˆ๋Š” ํ”„๋ ›์˜ ์ˆ˜ P๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (N ≤ 500,000, 2 ≤ P ≤ 300,000)

     

    ๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ๋ฉœ๋กœ๋””์˜ ํ•œ ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ์ค„์˜ ๋ฒˆํ˜ธ์ด๊ณ  ๋‘ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ๊ทธ ์ค„์—์„œ ๋ˆŒ๋Ÿฌ์•ผ ํ•˜๋Š” ํ”„๋ ›์˜ ๋ฒˆํ˜ธ์ด๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์Œ์˜ ์ˆœ์„œ๋Œ€๋กœ ๊ธฐํƒ€๋ฅผ ์—ฐ์ฃผํ•ด์•ผ ํ•œ๋‹ค.

    ์ถœ๋ ฅ

    ์ฒซ์งธ ์ค„์— ๋ฉœ๋กœ๋””๋ฅผ ์—ฐ์ฃผํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ ์†๊ฐ€๋ฝ ์›€์ง์ž„์„ ์ถœ๋ ฅํ•œ๋‹ค.

    ์˜ˆ์ œ ์ž…๋ ฅ 1

    5 15
    2 8
    2 10
    2 12
    2 10
    2 5

    ์˜ˆ์ œ ์ถœ๋ ฅ 1

    7

    ์˜ˆ์ œ ์ž…๋ ฅ 2

    7 15
    1 5
    2 3
    2 5
    2 7
    2 4
    1 5
    1 3

    ์˜ˆ์ œ ์ถœ๋ ฅ 2

    9

     


     

    ๐Ÿ“Œ ํ’€์ด

    import sys
    input = sys.stdin.readline
    
    n, p = map(int, input().split())
    lines = [[] for _ in range(7)]
    cnt = 0
    
    for _ in range(n):
        line, fret = map(int, input().split())
        line = lines[line - 1]
    
        while line and fret < line[-1]:
            line.pop()
            cnt += 1
    
        if not line or fret > line[-1]:
            line.append(fret)
            cnt += 1
    
    print(cnt)

     

    ํ•œ ์ค„์— ๋ˆŒ๋ ค์žˆ๋Š” ํ”„๋ › ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด stack์„ ์‚ฌ์šฉํ•˜๊ณ , ์ค„์ด ์—ฌ๋Ÿฌ๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— stack๋“ค์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • line: ํ•ด๋‹น ์ค„ stack
    • fret: ํ˜„์žฌ ๋ˆ„๋ฅด๋ ค๋Š” ํ”„๋ › ๋ฒˆํ˜ธ

     

    stack ์ƒํƒœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์‚ดํŽด ๋ณด๋ฉด ํฌ๊ฒŒ ์•„๋ž˜ 7๊ฐœ์˜ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์šฐ๋ฆฌ๊ฐ€ ์ทจํ•ด์•ผ ํ•  ๋™์ž‘์€ pop์ด๊ฑฐ๋‚˜ append์ด๊ฑฐ๋‚˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜์ด๋ฏ€๋กœ, pop์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์™€ append๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ด๋ถ„๋ฒ•์ ์œผ๋กœ ๋‚˜๋ˆ  ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • while line and fret < line[-1]
      stack์ด ์ฐจ ์žˆ๊ณ  stack top์ด ๋ˆ„๋ฅด๋ ค๋Š” ํ”„๋ ›๋ณด๋‹ค ํฐ ๋ฒˆํ˜ธ์ธ ๊ฒฝ์šฐ pop
    • if not line or fret > line[-1]
      stack์ด ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ stack top์ด ๋ˆ„๋ฅด๋ ค๋Š” ํ”„๋ ›๋ณด๋‹ค ์ž‘์€ ๋ฒˆํ˜ธ์ธ ๊ฒฝ์šฐ append

     

    ๋Œ“๊ธ€

Designed by Tistory.