https://www.acmicpc.net/problem/3709
3709번: 레이저빔은 어디로
레이저박스라는 게임은 정사각형 모양의 n x n 보드에서 진행한다. (체스판을 상상하면 된다) 레이저박스의 임의의 칸마다 우향우 거울이라는 장치가 설치되어 있고, 마지막으로 레이저 한개가
www.acmicpc.net
vector를 설정하여 이동하며 우향우 거울이 있는 경우 vector를 변경하여 탈출할 때 까지 시뮬레이션 하는 문제이다.
mirror라는 n*n 배열을 생성한 후 우향우 거울이 있는 위치를 저장해준다.
이후 zero index를 위한 값 변경을 한 후 dy, dx 배열을 상, 우, 하, 좌 순서로 배치한다.
그리고 시작점 위치를 토대로 방향을 설정한 후 거울이 있는지 체크해가며 이동하면 된다.
보드 바깥에서 출발하므로 우향우 거울로 인해 무한반복 되는 경우는 없다.
따라서 while문을 탈출할 때의 좌표를 출력하면 된다.
import sys
input = sys.stdin.readline
for _ in range(int(input())):
n, r = map(int,input().split())
mirror = [[0 for _ in range(n)] for _ in range(n)]
for _ in range(r):
my, mx = map(int,input().split())
mirror[my-1][mx-1] = 1
y, x = map(int,input().split())
y -= 1
x -= 1
dy = [-1, 0, 1, 0]
dx = [0, 1, 0, -1]
if y == n:
v = 0
elif x == -1:
v = 1
elif y == -1:
v = 2
else:
v = 3
y += dy[v]
x += dx[v]
while 0 <= y < n and 0 <= x < n:
if mirror[y][x] == 1:
v = (v+1)%4
y += dy[v]
x += dx[v]
print(y+1, x+1)
'백준(BOJ)' 카테고리의 다른 글
[Python/파이썬] - 백준(BOJ) 14442번 : 벽 부수고 이동하기 2 (0) | 2022.06.04 |
---|---|
[Python/파이썬] - 백준(BOJ) 16235번 : 나무 재테크 (0) | 2022.06.03 |
[Python/파이썬] - 백준(BOJ) 1025번 : 제곱수 찾기 (0) | 2022.05.31 |
[Python/파이썬] - 백준(BOJ) 1027번 : 고층 건물 (0) | 2022.05.31 |
[Python/파이썬] - 백준(BOJ) 1781번 : 컵라면 (0) | 2022.05.28 |