구현에서 많이 쓰이는 상하좌우 이동 방법 정리~
일단 업로드! 추가적으로 수정할 예정
그림으로 이해하기
이것이 코딩테스트다 예제
구현 예제 4-1 :: 상하좌우
# 구현 예제 4-1 상하좌우
n=int(input())
mv=input().split()
x,y=1,1 # 시작 좌표 항상 1.1
dx=[0,-1,0,1]
dy=[1,0,-1,0]
mv_type=['R','U','L','D']
for m in mv: # 이동 계획 확인
for i in range(len(mv_type)): # 이동 후 좌표 구하기
if m==mv_type[i]:
nx=x+dx[i]
ny=y+dy[i]
# 공간을 벗어나는 경우 무시, 시작점 1,1이라서 작으면 무시, nxn 배열이라
if nx<1 or ny<1 or nx>n or ny>n:
continue # 무시
x,y=nx,ny
print(x,y)
구현 예제 4-2 :: 시각
#예제 4-2 시각
# 0시0분0초 ~ n시59분59초 시간 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하라
n=int(input())
cnt=0
for i in range(n+1): #n시간
for j in range(60): # 60분
for k in range(60): # 60초
#매 시각 안에 3이 포함되어있으면 -> cnt 증가
if '3'in str(i)+ str(j) + str(k):
cnt+=1
print(cnt)
구현 실전 :: 왕실의 나이트
# 구현 실전 왕실의 나이트
st=input()
row=int(st[1])
col=int(ord(st[0]))-int(ord('a'))+1
steps=[(-2,-1),(-1,-2),(1,-2),(2,-1),(2,1),(1,2),(-1,2),(-2,1)] # 중요 Point
ans=0
for s in steps:
nrow=row+s[0]
ncol=col+s[1]
if nrow>=1 and nrow<=8 and ncol>=1 and ncol<=8:
ans+=1
print(ans)
구현 실전 :: 게임 개발 (어렵다^^;;)
# 게임 개발
n,m=map(int, input().split())
point=[[0]*m for _ in range(n)] # 방문 위치 0으로 초기화 한 맵
x,y,direction=map(int,input()split())
point[x][y]=1 # 현재 위치 방문 처리
# 전체 맵 정보 입력
arr=[] # 전체 맵
for i in range(n):
arr.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: # 0북 1동 2남 3서
direction =3
# 시뮬레이션 시작
cnt=1
turn_time=0
while True:
#왼쪽 회전
turn_left()
nx=x+dx[direction]
ny=y+dy[direction]
# 회전 후 정면에 가보지 않은 칸 존재할 경우 -> 이동
if point[nx][ny]==0 and arr[nx][ny]==0:
point[nx][ny]=1
x=nx
y=ny
cnt+=1
turn_time=0
continue
# 회전 후 가본칸이거나 바다인 경우
else:
turn_time+=1
# 네 방향 모두 갈 수 없는 경우
if turn_time==4:
nx=x-dx[direction]
ny=y-dy[direction]
# 뒤로 갈 수 있다면 이동하기
if arr[nx][ny]==0:
x=nx
y=ny
# 뒤가 바다로 막혀있는 경우
else:
break
turn_time=0
print(cnt)
'알고리즘' 카테고리의 다른 글
알고리즘 이론 :: 패턴 마디 체크 방법 (0) | 2022.10.27 |
---|---|
알고리즘 이론 :: 2차원 배열 회전 (0) | 2022.10.26 |
알고리즘 이론 :: DFS/BFS (1) | 2022.10.04 |