๋ฐฑ์ค€ 2002 ์ถ”์›” ํŒŒ์ด์ฌ

2023. 3. 1. 01:05ใ†๐Ÿ”ฑ Algorithm

 

 

2002๋ฒˆ: ์ถ”์›”

์ž…๋ ฅ์€ ์ด 2N+1๊ฐœ์˜ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ฒซ ์ค„์—๋Š” ์ฐจ์˜ ๋Œ€์ˆ˜ N(1 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋Œ€๊ทผ์ด๊ฐ€ ์ ์€ ์ฐจ๋Ÿ‰ ๋ฒˆํ˜ธ ๋ชฉ๋ก์ด ์ฃผ์–ด์ง€๊ณ , N+2์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ์˜์‹์ด

www.acmicpc.net

 

์˜ ์ด์ง€ํ•œ ๋ฌธ์ œ์ง€๋งŒ ํ’€์ด ๋ฐฉ๋ฒ•์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•„์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค ์ฝ”๋“œ๋ž‘ ๋น„๊ตํ•ด๋ดค๋‹ค. 

 

๋‚ด๊ฐ€ ํ‘ผ ์ฝ”๋“œ

deque ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. 

๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ๊ฒƒ์€ ์ถ”์›”ํ•œ ์ฐจ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ. ์ฆ‰ first in first out ์„ ์œ„๋ฐฐํ•œ ๊ฒฝ์šฐ๋ฅผ ์นด์šดํŠธ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

q1 ์ด๋ž€ deque() ์— ํ„ฐ๋„์— ๋“ค์–ด๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ์›์†Œ๋ฅผ ๋‹ด๋Š”๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์ฐจ๋ก€๋Œ€๋กœ ํ„ฐ๋„์„ ๋น ์ ธ๋‚˜์˜ค๋Š” ์›์†Œ(out) ๊ฐ€ q1 ์˜ ์ฒซ๋ฒˆ์งธ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋ฉด, ํ•ด๋‹น ์›์†Œ๋Š” ์ถ”์›”ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ๋‹ค.

์ถ”์›”ํ•œ ์ฐจ์— ๋Œ€ํ•œ ์นด์šดํŠธ๋ฅผ ์˜ฌ๋ ค์ฃผ๊ณ  deque ์—์„œ ํ•ด๋‹น ์›์†Œ๋ฅผ ์‚ญ์ œํ•ด์ฃผ์ž

from collections import deque

answer = 0
n = int(input())
q1 = deque()

for i in range(n*2):
    if i < n:
        q1.append(input())
    else:
        out = input()
        if out != q1[0]:
            q1.remove(out)
            answer += 1
        else:
            q1.popleft()

print(answer)

 

๋‹ค ํ’€๊ณ  ๋ณด๋‹ˆ q1.remove(out) ๋ผ์ธ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•˜๋‹ค. 

 

๐Ÿ”— ์ฐธ๊ณ ํ•œ ์ฝ”๋“œ

์ด ๋ถ„์€ for ๋ฌธ์„ ์ข€ ๋งŽ์ด ์‚ฌ์šฉํ•˜์…จ์ง€๋งŒ, n ์ด 1000๋ฐ–์— ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„ ๋ฌธ์ œ๋กœ๋ถ€ํ„ฐ๋Š” ์ž์œ ๋กญ๋‹ค. (์ด์ค‘ for ๋ฌธ ๊ดœ์ถ˜)

Exit ๋ฐฐ์—ด์— ํ„ฐ๋„์— ์ž…์žฅํ•œ ์ˆœ์„œ๋ฅผ ์ฐจ๋ก€๋กœ ์ €์žฅํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด , a b c d e ์ˆœ์„œ๋กœ ์ž…์žฅํ–ˆ๊ณ , d c a b e ์ˆœ์„œ๋กœ ํ‡ด์žฅํ•œ๋‹ค๋ฉด Exit ๋ฐฐ์—ด์€ [3, 2, 0, 1, 4] ๋กœ ์ €์žฅ๋œ๋‹ค. (์ฒซ ์ˆœ์„œ๋Š” 0)

์ด ์ผ€์ด์Šค์— ์ถ”์›” ์นด์šดํŠธ๋Š” 2 ๊ฐ€ ๋œ๋‹ค (d, c ๊ฐ€ ์ถ”์›”๋งจ)

์ฆ‰ Exit ๋ฐฐ์—ด์—์„œ ์ž์‹ ๋ณด๋‹ค ๋’ค์— ์œ„์น˜ํ•œ ์›์†Œ์˜ ๊ฐ’์ด ์ž‘๋‹ค๋ฉด, ํ•ด๋‹น ์›์†Œ๋Š” ์ถ”์›”๋งจ์ธ ๊ฒƒ์ด๋‹ค.

์•„๋ž˜ ์ฝ”๋“œ์—์„  ์ด์ค‘ for ๋ฌธ์„ ์‚ฌ์šฉํ•ด ์ž์‹ ๋ณด๋‹ค ๋’ค์— ์œ„์น˜ํ•œ ์›์†Œ ์ค‘ ๊ฐ’์ด ์ž‘์€ ๊ฒƒ์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•œ๋‹ค.

 

์ด์ค‘ for ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ชฝ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆœ ์—†๋Š”์ง€ ์ƒ๊ฐํ•ด๋ด์•ผ๊ฒ ๋‹ค.

N = int(input())
Entry = {input().rstrip() : i for i in range(N)}
Exit = list(int(Entry[input().rstrip()]) for _ in range(N))

res = 0
for i in range(N):
    for j in range(i, N):
        if Exit[i] > Exit[j]:
            res += 1
            break
print(res)