https://www.acmicpc.net/problem/3190
이번 문제는 간단한 로직 구현 정도였습니다.
로직이 다른 문제에 비해서는 조금은 난이도 있었다고 생각합니다.
삼성 A형 문제들이 기본 알고리즘도 중요하지만 구현에 초점을 두고 있다는 생각이 듭니다.
(3시간 2문제여서 그런가 싶네요)
from collections import deque
n = int(input())
arr = [[0 for i in range(n)]for j in range(n)]
app = int(input())
for i in range(app):
x, y = map(int,input().split())
x -= 1
y -= 1
arr[x][y] = 1
move = int(input())
moving = []
for i in range(move):
moving.append(input().split()) #이것도 큐로 하면 더 빨라짐
cnt = 0
dx, dy = [0,-1,0,1], [1,0,-1,0] # 오른쪽 위쪽 왼쪽 아랫쪽
nx, ny = 0, 0 #회전 현상태
x, y = 0, 0 #현재 좌표
q = deque()
arr[x][y] = -1
q.append([x,y])
while True:
# 회전 처리
if moving and int(moving[0][0]) == cnt:
if moving[0][1] == "L":
nx += 1
ny += 1
if nx == 4:
nx, ny = 0, 0
elif moving[0][1] == "D":
nx -= 1
ny -= 1
if nx == -1:
nx, ny = 3, 3
moving.pop(0)
# 맵을 벗어나는지 먼저 확인
if 0 <= x+dx[nx] <= n-1 and 0 <= y+dy[ny] <= n-1:
if arr[x + dx[nx]][y + dy[ny]] == 1: # 사과
x += dx[nx]
y += dy[ny]
arr[x][y] = -1
q.append([x,y])
elif arr[x+dx[nx]][y+dy[ny]] == 0: #빈 공간이면 꼬리를 지움
x += dx[nx]
y += dy[ny]
arr[x][y] = -1
q.append([x,y])
px, py = q.popleft()
arr[px][py] = 0
else:
cnt += 1
break
else:
cnt += 1
break
cnt += 1
print(cnt)
'알고리즘' 카테고리의 다른 글
[Python] 다양한 문자열 입력 방법 (0) | 2022.05.03 |
---|---|
[백준] 14499번: 주사위 굴리기 (0) | 2022.04.30 |
[백준] 13460: 구슬 탈출 2 (0) | 2022.04.29 |
[백준] 5014번: 스타트링크 (0) | 2022.03.22 |
[백준] 1697번: 숨바꼭질 (0) | 2022.03.22 |