e.g., 왕실의 나이트: 나이트가 이동할 수 있는 경우는 2가지이다. (수평으로 두칸 이동한 뒤에 수직으로 한 칸 이동하기, 수직으로 두 칸 이동한 뒤에 수평으로 한칸 이동하기) 나이트의 위치가 주어졌을 때, 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오.
-> 나이트가 이동할 수 있는 경로를 리스트에 담고, 8가지 경우의 수를 반복문을 통해 하나씩 검사한다.
# 왕실의 나이트
check=[[2,1],[-2,-1],[-2,1],[2,-1],[1,2],[-1,-2],[-1,2],[1,-2]]
n=input("n: ") //c2
now=[]
now.append(ord(n[0])-96)
now.append(int(n[1]))
answerNot=0
for i in range(len(check)):
if now[0]+check[i][0]>8 or now[0]+check[i][0]<1:
answerNot+=1
continue
if now[1]+check[i][1]>8 or now[1]+check[i][1]<1:
answerNot+=1
print(8-answerNot) //6
e.g., 게임 개발: 캐릭터의 움직임에 이상이 있는지 테스트하려는 상황이다. 메뉴얼에 따라 캐릭터를 이동시킨 뒤에, 캐릭터가 방문한 칸의 수를 출력하는 프로그램 만들기.
1. 현재 위치에서 현재 방향을 기준으로 왼쪽 방향부터 차례대로 갈 곳을 정한다.
2. 캐릭터의 바로 왼쪽 방향에 아직 가보지 않은 칸이 존재한다면, 왼쪽 방향으로 회전한 다음 왼쪽으로 한 칸을 전진한다. 왼쪽 방향에 가보지 않은 칸이 없다면, 왼쪽 방향으로 회전만 수행하고 1단계로 돌아간다.
3. 만약 네 방향 모두 이미 가본 칸이거나 바다로 되어 있는 칸인 경우에는, 바라보는 방향을 유지한 채로 한칸 뒤로 가고 1단계로 돌아간다. 단 이때 뒤족 방향이 바다인 칸이라 뒤로 갈 수 없는 경우에는 움직임을 멈춘다.
n, m=map(int,input().split())
d=[[0]*m for _ in range(n)] # 방문한 위치를 저장하기 위한 맵을 생성하여 0으로 초기화
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():
global direction
direction-=1
if direction==-1:
direction=3
#시물레이션 시작
cnt=0# answer
time=0 #돌아간 횟수
while True:
turn()
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
cnt+=1
time=0
continue
else:
time+=1
if time==4:
nx=x-dx[direction]
ny=y-dy[direction]
if array[nx][ny]==0:
x=nx
y=ny
else:
break
time=0
print(cnt)
[알고리즘] 이코테 - 다이나믹 프로그래밍(동적 계획법) (0) | 2024.01.11 |
---|---|
[알고리즘] 이코테 - 이진탐색 (0) | 2024.01.09 |
[알고리즘] 이코테 - 정렬 (0) | 2024.01.09 |
[알고리즘] 이코테 - DFS / BFS (0) | 2024.01.06 |
[알고리즘] 이코테 - 그리디 (0) | 2024.01.02 |