โ๋ฌธ์
https://www.acmicpc.net/problem/3190
๋ฉ๋ชจ๋ฆฌ: 114200 KB, ์๊ฐ: 148 ms
๊ตฌํ, ์๋ฃ ๊ตฌ์กฐ, ์๋ฎฌ๋ ์ด์ , ๋ฑ, ํ
'Dummy' ๋ผ๋ ๋์ค๊ฒ์์ด ์๋ค. ์ด ๊ฒ์์๋ ๋ฑ์ด ๋์์ ๊ธฐ์ด๋ค๋๋๋ฐ, ์ฌ๊ณผ๋ฅผ ๋จน์ผ๋ฉด ๋ฑ ๊ธธ์ด๊ฐ ๋์ด๋๋ค. ๋ฑ์ด ์ด๋ฆฌ์ ๋ฆฌ ๊ธฐ์ด๋ค๋๋ค๊ฐ ๋ฒฝ ๋๋ ์๊ธฐ์์ ์ ๋ชธ๊ณผ ๋ถ๋ชํ๋ฉด ๊ฒ์์ด ๋๋๋ค.
๊ฒ์์ NxN ์ ์ฌ๊ฐ ๋ณด๋์์์ ์งํ๋๊ณ , ๋ช๋ช ์นธ์๋ ์ฌ๊ณผ๊ฐ ๋์ฌ์ ธ ์๋ค. ๋ณด๋์ ์ํ์ข์ฐ ๋์ ๋ฒฝ์ด ์๋ค. ๊ฒ์์ด ์์ํ ๋ ๋ฑ์ ๋งจ์ ๋งจ์ข์ธก์ ์์นํ๊ณ ๋ฑ์ ๊ธธ์ด๋ 1 ์ด๋ค. ๋ฑ์ ์ฒ์์ ์ค๋ฅธ์ชฝ์ ํฅํ๋ค.
๋ฑ์ ๋งค ์ด๋ง๋ค ์ด๋์ ํ๋๋ฐ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฅธ๋ค.
- ๋จผ์ ๋ฑ์ ๋ชธ๊ธธ์ด๋ฅผ ๋๋ ค ๋จธ๋ฆฌ๋ฅผ ๋ค์์นธ์ ์์น์ํจ๋ค.
- ๋ง์ฝ ๋ฒฝ์ด๋ ์๊ธฐ์์ ์ ๋ชธ๊ณผ ๋ถ๋ชํ๋ฉด ๊ฒ์์ด ๋๋๋ค.
- ๋ง์ฝ ์ด๋ํ ์นธ์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด, ๊ทธ ์นธ์ ์๋ ์ฌ๊ณผ๊ฐ ์์ด์ง๊ณ ๊ผฌ๋ฆฌ๋ ์์ง์ด์ง ์๋๋ค.
- ๋ง์ฝ ์ด๋ํ ์นธ์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด, ๋ชธ๊ธธ์ด๋ฅผ ์ค์ฌ์ ๊ผฌ๋ฆฌ๊ฐ ์์นํ ์นธ์ ๋น์์ค๋ค. ์ฆ, ๋ชธ๊ธธ์ด๋ ๋ณํ์ง ์๋๋ค.
์ฌ๊ณผ์ ์์น์ ๋ฑ์ ์ด๋๊ฒฝ๋ก๊ฐ ์ฃผ์ด์ง ๋ ์ด ๊ฒ์์ด ๋ช ์ด์ ๋๋๋์ง ๊ณ์ฐํ๋ผ.
โ๐ปํ์ด
ํ ์คํธ์ผ์ด์ค 3๋ฒ์ ์ดํด๋ณด๋ฉด ๋ฑ์ ์์ ๊ฐ์ด ์์ง์ธ๋ค. 13์ด์ ๋จธ๋ฆฌ๋ฅผ ์์ง์ด๋ฉด 12์ด์ผ ๋ ๊ผฌ๋ฆฌ๊ฐ 13์ด์ผ ๋ ๋จธ๋ฆฌ๊ฐ ์์ง์ด๋ ๋ฐฉํฅ์ ์์ผ๋ฏ๋ก ์ถฉ๋ํ์ฌ ๋ฉ์ถ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ฒ์์ด 13์ด์ ์ข ๋ฃ๋๋ ๊ฒ์ด๋ค.
๋ฐฉํฅ ๋ฐ๋ผ์ ๋ฑ์ด ์์ง์ด๋ ค๋ ๋ค์ ์นธ์ด ๋ฒ์์์ ๋ฒ์ด๋๊ฑฐ๋ ๋ชธํต๊ณผ ๋ง๋๋ฉด while๋ฌธ์ ์ค๋จ์ํจ๋ค. ์ด๋ ํ์ฌ ์๊ฐ+1์ ๋ฐํํ๋ค. ๋ฒ์ด๋๊ฑฐ๋ ๋ถ๋ชํ์ง ์๋๋ค๋ฉด ์ฌ๊ณผ๊ฐ ์๋ ์์น์ธ์ง ์๋ ์์น์ธ์ง ํ์ธํ๋ค. ์ฌ๊ณผ๊ฐ ์๋ ์์น๋ผ๋ฉด ๊ผฌ๋ฆฌ๋ฅผ ํ์์ ๋บ๋ค. ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด ๋ฆฌ์คํธ์์ ์ฌ๊ณผ๋ฅผ ์ ๊ฑฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฑ์ ํ์ฌ ๋จธ๋ฆฌ ์์น๋ฅผ ํ์ ๋ฃ๊ณ ์๊ฐ์ +1 ํ๋ค. ์ด๋ ๊ฒ ์๊ฐ์ +1์ ํ๋ค๋ณด๋ฉด ๋ฑ์ ๋ฐฉํฅ ์ ํ ์๊ฐ์ด ๋๋ค. ๋ฑ์ ๋ฐฉํฅ ์ ํ ์๊ฐ์ ์๋ ๋ฐฉํฅ์ ๋ฐ๋ผ ๋จธ๋ฆฌ๋ ์ค๋ฅธ์ชฝ๊ณผ ์ผ์ชฝ์ผ๋ก ๋๋ฆฌ๋ฉด ๋๋ค.
๐ป์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
K = int(input())
apples = [list(map(int, input().split())) for _ in range(K)]
L = int(input())
turns = deque([input().split() for _ in range(L)]) # X์ด๊ฐ ๋๋ ๋ค์ ๋ฑ์ด C ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ .
# ๋ฐฉํฅ ์ ํ D = ์ค๋ฅธ์ชฝ, L = ์ผ์ชฝ
rotate = {'D': 1, 'L': -1}
# ๋ถ, ๋, ๋จ, ์
dy = [-1, 0, 1, 0]
dx = [0, 1, 0, -1]
def OutOfRange(y, x):
return False if 0 < y <= N and 0 < x <= N else True
def game(y, x, d):
t = 0
move = deque([(y, x)])
while True:
ny, nx = y + dy[d], x + dx[d]
if OutOfRange(ny, nx) or (ny, nx) in move: # ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฉ์ถค.
break
if [ny, nx] not in apples: # ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด ๊ผฌ๋ฆฌ ์ ๊ฑฐ
move.popleft()
else:
apples.remove([ny, nx])
y, x = ny, nx
move.append((ny, nx))
t += 1
if turns and t == int(turns[0][0]):
turn = turns.popleft()[1]
d = (d + rotate[turn]) % 4 # ์ผ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ์ผ๋ก 90๋ ํ์ .
return t+1
print(game(1, 1, 1)) # ์ค๋ฅธ์ชฝ์ผ๋ก ํฅํ๋ค๊ณ ํ์์ผ๋ฏ๋ก ๋ฐฉํฅ์ 1๋ก ํจ.
๐ํ๊ธฐ
๋ฌธ์ ๋ฅผ ์๋ชป ์ดํดํด์ ๋จธ๋ฆฌ๋ ๋ชธ์ด ์ ๋ถ๋ชํ๋ ๊ฒฝ์ฐ๊ฐ ์ ์๊ธฐ๋์ง ์๋ฌธ์ด์๋ค. ์ฌ๊ณผ๋ฅผ ๋จน์ผ๋ฉด ๋ฑ์ ๊ธธ์ด๊ฐ ๋์ด๋๊ธฐ ๋๋ฌธ์ด๋ผ๋ ๊ฑธ ๋ค๋ฆ๊ฒ ์์์ ์ข ๋ง์ด ํค๋งจ ๋ฌธ์ ์๋ค...
๋ค๋ฅธ ์ฌ๋๋ค์ ํ์ด๋ฅผ ๋ณด๋ฉด 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ ๋ฑ์ด ์ง๋๊ฐ๋ ๊ฒ๊ณผ ์ฌ๊ณผ๊ฐ ์ ๋ฌด๋ฅผ ํ์ํ์๋๋ฐ ๊ตณ์ด ๊ทธ๋ด ํ์๊ฐ ์๋ ๋ฌธ์ ๋ค. ๋ค๋ง, ์คํ๋ ค ๊ธฐ์กด ์ฌ๊ณผ๊ฐ ์๋ ๋ฐฐ์ด์์ ์ฌ๊ณผ๋ฅผ ๋จน๊ณ ์ง์ฐ๋ ๊ฒ์ด ์๊ฐ์ด ๋ ๊ฑธ๋ฆด ์๋ ์๋ค. ์ด ๋ถ๋ถ์ ํ์ธํ์ง ๋ชปํ์์ผ๋ ๊ถ๊ธํ๋ค๋ฉด ๊ฐ์ธ์ ์ผ๋ก ์ฐพ์๋ณด๊ธธ...
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 14502. ์ฐ๊ตฌ์/Python - Gold4 (0) | 2025.08.03 |
---|---|
[๋ฐฑ์ค] 14499. ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ/Python - Gold4 (4) | 2025.08.02 |
[๋ฐฑ์ค] 14503. ๋ก๋ด ์ฒญ์๊ธฐ/Python - Gold5 (1) | 2025.07.29 |
[๋ฐฑ์ค] 14891. ํฑ๋๋ฐํด/Python - Gold5 (2) | 2025.07.25 |
[๋ฐฑ์ค] 14501. ํด์ฌ/Python - Silver3 (1) | 2025.07.23 |