코딩테스트
[파이썬(python)] 이것이 취업을 위한 코딩테스트다 게임 개발 118p
고후
2022. 2. 7. 11:46
이전에 풀었던 뱀 문제를 복습하려고 풀어봤다. 이번에는 예전 문제를 복습하는 거라 어렵지 않게 풀수있었다.
그런데, 맵의 외곽이 항상 바다로 구성되어 있기 때문에 캐릭터가 밖으로 떨어지지 못한다.
이 부분을 알고 있었다면 조금 더 쉽게 풀 수 있었을 것 같다.
n, m = map(int, input().split())
x, y, d = map(int, input().split())
game_map = []
for _ in range(n):
game_map.append(list(map(int, input().split())))
dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]
visit = []
def rotate(d):
if d == 0:
return 3
else:
return d-1
answer = 1
count = 0
visit.append([x, y])
while True:
d = rotate(d)
count += 1 # 방향 회전 수
nx = x + dx[d]
ny = y + dy[d]
if 0 <= nx and nx < n and 0 <= ny and ny < m:
if [nx, ny] not in visit and game_map[nx][ny] == 0:
answer += 1
visit.append([nx, ny])
x, y = nx, ny
count = 0
continue
else:
break
if count == 4:
x = x - dx[d]
y = y - dy[d]
count = 0
if 0 > x or x >= n or 0 > y or y >= m:
break
if game_map[x][y] == 1:
break
print(answer)
답지를 보고 조금 더 개선한 코드는 아래와 같다.
n, m = map(int, input().split())
x, y, d = map(int, input().split())
game_map = []
for _ in range(n):
game_map.append(list(map(int, input().split())))
dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]
visit = []
def rotate(d):
if d == 0:
return 3
else:
return d-1
answer = 1
count = 0
visit.append([x, y])
while True:
d = rotate(d)
count += 1 # 방향 회전 수
nx = x + dx[d]
ny = y + dy[d]
if [nx, ny] not in visit and game_map[nx][ny] == 0:
answer += 1
visit.append([nx, ny])
x, y = nx, ny
count = 0
continue
if count == 4:
x = x - dx[d]
y = y - dy[d]
count = 0
if game_map[x][y] == 1:
break
print(answer)