[東賓書]実施-ゲーム開発
10770 ワード
問題の説明
IN
地図の垂直サイズN、地図の水平サイズM
ゲームキャラクタの座標と方向
→方向:北0洞1南2西3
地図が陸なのか海なのかについて
→0:陸地、1:海
OUT 移動後のキャラクタアクセスの格子数 質問する
NMサイズのマッピング(11サイズの正方形からなる)でキャラクタを移動
各格子は海洋または陸地からなり、海洋が通過する回数x
移動の条件は
[左から右へ](From Left to Right)現在の方向にスペースを表示
1.1左側がドアxですか?
:左に回転して左に1マス移動
1.2左側がドアですo
:左のみ回転、x移動
四方向に行ったことがある格/4面が海なら
:1つ後退し、後ろが海の場合は終了
に答える
陸地は0,海洋は1,訪問した陸地は2
→最初にも訪問したことがあるので、初期に2に設定します!!
左に回転→(現在位置+3)%4
後退→(pos[2]+2)%4
IN
地図の垂直サイズN、地図の水平サイズM
ゲームキャラクタの座標と方向
→方向:北0洞1南2西3
地図が陸なのか海なのかについて
→0:陸地、1:海
NMサイズのマッピング(11サイズの正方形からなる)でキャラクタを移動
各格子は海洋または陸地からなり、海洋が通過する回数x
移動の条件は
[左から右へ](From Left to Right)現在の方向にスペースを表示
1.1左側がドアxですか?
:左に回転して左に1マス移動
1.2左側がドアですo
:左のみ回転、x移動
四方向に行ったことがある格/4面が海なら
:1つ後退し、後ろが海の場合は終了
def solution():
N, M = map(int, input().split())
pos = list(map(int, input().split()))
map_info = []
dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]
dir_count = 0
count = 1
for i in range(N):
arr = list(map(int, input().split()))
map_info.append(arr)
map_info[pos[0]][pos[1]] = 2
while True:
if dir_count > 4:
back = (pos[2]+2) % 4
pos[1] += dx[back]
pos[0] += dy[back]
if map_info[pos[0]][pos[1]] == 1:
break
else:
dir_count = 0
#바라보는 방향 기준 왼쪽을 방문했는지 ?
left = (pos[2]+3)%4
if map_info[pos[0]+dy[left]][pos[1]+dx[left]] == 0:
#왼쪽 방문한적 없음
pos[2] = left
pos[1] += dx[pos[2]]
pos[0] += dy[pos[2]]
map_info[pos[0]][pos[1]] = 2
count += 1
dir_count = 0
else:
pos[2] = left
dir_count += 1
print("pos: ", pos, " count: ", dir_count)
print(map_info)
return count
print(solution())
陸地は0,海洋は1,訪問した陸地は2
→最初にも訪問したことがあるので、初期に2に設定します!!
左に回転→(現在位置+3)%4
後退→(pos[2]+2)%4
Reference
この問題について([東賓書]実施-ゲーム開発), 我々は、より多くの情報をここで見つけました https://velog.io/@woo0_hooo/동빈북-구현-게임개발テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol