문제 링크 : https://www.acmicpc.net/problem/3190
막학기 기말고사 시즌인데 하필 코로나를 걸려버려서 정신 없었다 ..
오랜만에 다시 PS 를 시작했다. 오늘이 월요일이어서 오히려 좋아.
학교 수업 때문에 C++ 만 사용하다가 오랜만에 Python 사용하니까 헷갈리긴 했는데 역시 난 파이썬이 좋다.
시뮬레이션 문제인데 요새 기업 코딩테스트 트렌드가 문제 이해 바탕으로 한 빡구현 문제들을 자주 출제하는 것 같아서 연습하기 좋은 문제였던거 같다.
내 로직에서는 time = 1 로 시작해야 됐던게 관건인 것 같고, 사과의 행 열 위치를 -1 씩 해줘야하는 함정을 조심해야 됐었다.
그리고 마지막 if 문에서 "if curve" 했던것처럼 리스트가 비어있지는 않은지 확인하는 습관을 들여야겠다.
import sys from collections import deque N = int(sys.stdin.readline()) K = int(sys.stdin.readline()) graph = [[0] * N for _ in range(N)] # 사과 설정 for _ in range(K): x, y = map(int, sys.stdin.readline().split()) graph[x-1][y-1] = 1 L = int(sys.stdin.readline()) curve = deque() for _ in range(L): X, C = sys.stdin.readline().split() curve.append((int(X), C)) # 게임 시작 x = 0 y = 0 snake = deque([(0, 0)]) direction = [(0, 1), (1, 0), (0, -1), (-1, 0)] # 우 하 좌 상 time = 1 d = 0 graph[x][y] = -1 # 뱀 while True: #print('x y',x,y) nx = x + direction[d][0] ny = y + direction[d][1] # 맵 안에 들어온 경우 if 0 <= nx < N and 0 <= ny < N: # 사과를 먹을 경우 if graph[nx][ny] == 1: x = nx y = ny graph[nx][ny] = -1 snake.append((nx, ny)) # 사과를 안먹을 경우 elif graph[nx][ny] == 0: x = nx y = ny graph[nx][ny] = -1 snake.append((nx, ny)) # 꼬리를 자름 tail = snake[0] graph[tail[0]][tail[1]] = 0 snake.popleft() # 자기 몸에 부딪힐 경우 elif graph[nx][ny] == -1: print(time) break # 맵 밖에 나갈 경우 else: print(time) break if curve and time == curve[0][0]: if curve[0][1] == 'L': d = (d-1) % 4 elif curve[0][1] == 'D': d = (d+1) % 4 curve.popleft() time += 1