728x90
<3> 게임 개발
너무 복잡해서 일단 구현부터 했다
# N,M을 공백으로 구분하여 입력받기
n,m = map(int, input().split())
# 방문한 위치를 저장하기 위한 맵을 생성하여 0으로 초기화
d = [[0]*m for _ in range(n)]
# 현재 캐릭터의 x좌표, y좌표, 방향을 입력받기
x,y,direction = map(int,input().split())
d[x][y]=1 #현재 좌표 방문 처리
#전체 맵 정보를 입력받기
array = []
for i in range(n) :
array.append(list(map(int,input().split())))
# 북, 동, 남, 서 방향 정의
dx = [-1,0,1,0]
dy = [0,1,0,-1]
#왼쪽으로 회전
def turn_left() :
global direction
direction -= 1
if direction == -1 :
direction = 3
#시뮬레이션 시작
count = 1 #이미 있는 곳도 세나봄
turn_time = 0 #turn_time이 4번 되면 멈춤
while True :
#왼쪽으로 회전(가나 안 가나 어차피 다 돌아야 함)
turn_left()
nx = x + dx[direction]
ny = y + dy[direction]
#회전한 이후 정면에 가보지 않은 칸이 존재하는 경우 이동
if d[nx][ny] == 0 and array[nx][ny]==0 :
d[nx][ny]=1
x=nx
y=ny
count += 1
turn_time = 0 #이동후 turn_time 초기화
continue
#회전한 이후 정면에 가보지 않은 칸이 없거나 바다인 경우
else :
turn_time +=1 #회전만 했다는 뜻
#네 방향 모두 갈 수 없는 경우
if turn_time ==4 :
#뒤로 갈 수 있다면 이동하기
nx = x - dx[direction]
ny = y - dy[direction]
if array[nx][ny] == 0 : #육지인 경우(방문여부상관x)
x = nx
y = ny
#뒤로 바다로 막혀있는 경우
else :
break
turn_time=0 # turn_time 초기화
몰랐던 것
- 문제 이해를 잘 해야 되는 구나. 예를들어 모든 칸을 이미 가본 칸이거나 바다로 되어있는 칸이기 전까지는 (아무튼 회전한 count가 4가되면) 왼쪽으로 무조건 회전한다는 것
- turn_time 초기화를 잘 사용해야 한다는 것. turn_time에 따라서 회전과 전진을 반복할지 멈추거나 한칸 뒤로갈지가 정해지기 때문
- 바다와 방문을 어떻게 구분할까 고민했는데, 맵을 하나 더 만들었다.
- 회전 후 전진과 그냥 회전을 어떻게 구분할까 했는데 일단 회전하고 전진할지 말지를 정하면 되었다 (이건 ‘일단 회전은 한다’는 걸 이해 못했기 때문에 나온 고민)
- 어쩌면 복잡해 보이는 것이 힌트가 될 수 있다. 예를 들어 1단계로 돌아가기 전에 수행하는 것 등. 전진 하나 하지 않나 회전은 한다는 것을 힌트로 준 셈,,,ㅜ 나는 거기서 뇌가 멈춰 버렸고..
질문
- 3번으로 어떻게 넘어가는 거지? 일단 1단계로 돌아가라는 말은 있지만 ’4방향 모두 이미 가본 칸이거나 ‘를 언제 확인 하라는 거지?
- ’바라보는 방향을 유지한채‘라고 했는데 회전부터 하고 if문으로 가는 걸,,?
- 1단계로 가라고 했는데 if 문을 무조건 만나는데,,?
답
- (2,3번의 답도 됨) ‘바라보는 방향을 유지한채’ 한칸 뒤로 가거나 말거나를 수행하려면 while문을 한번 더 돌지 않아서 회전을 수행하지 않고 if 문을 만나 이동하거나 말거나 하면 된다.
끝…
'프로그래밍 > 이것이 코딩테스트다' 카테고리의 다른 글
이것이 코딩테스트다 6일차 - 정렬 문제 (0) | 2023.07.07 |
---|---|
이것이 코딩테스트다 4일차 - BFS, DFS (0) | 2023.06.07 |
이것이 코딩테스트다 3일차 - 구현 (0) | 2023.06.07 |
이것이 코딩테스트다 3일차 - 그리디 (0) | 2023.06.02 |
이것이 코딩테스트다 2일차 - 파이썬 문법 : 입출력, 라이브러리 (0) | 2023.05.31 |
댓글