컴공생 누르지 마세요! 컴공생 울어요.
[구현] 구현 (2) 실전 문제 - 왕실의 나이트 본문
이코테 p.115 실전 문제 - 왕실의 나이트
내 소스코드
상하좌우 각각에 대하여 2칸 이동할 수 있는지 확인
상하로 이동했다면 좌우로 1칸 이동할 수 있는지 확인
좌우로 이동했다면 상하로 1칸 이동할 수 있는지 확인
data = input()
row = data[:1] # 알파벳
col = int(data[1:]) # 숫자
result = 0
if 3 <= col: # 위로 2칸 이동 가능
if 'b' <= row and row <= 'g': # 좌우 둘 다 1칸 이동 가능
result += 2
elif 'b' <= row or row <= 'g': # 좌우 둘 중에 하나만 1칸 이동 가능
result += 1
if col <= 6: # 아래로 2칸 이동 가능
if 'b' <= row and row <= 'g':
result += 2
elif 'b' <= row or row <= 'g':
result += 1
if 'c' <= row: # 좌로 2칸 이동 가능
if 'b' <= row and row <= 'g':
result += 2
elif 'b' <= row or row <= 'g':
result += 1
if row <= 'f': # 우로 2칸 이동 가능
if 'b' <= row and row <= 'g':
result += 2
elif 'b' <= row or row <= 'g':
result += 1
print(result)
교재 소스코드
steps를 이용하여 나이트의 이동 경로를 나타냄. 나이트의 현재 위치가 주어지면 이동 경로를 더한 다음, 이동 후 위치가 8x8 좌표 평면에 있는지 확인.
* ord(문자) : 하나의 문자를 입력으로 받고, 해당 문자의 아스키 코드를 반환
* steps 변수를 이용하는 테크닉 잘 알아두기
# 현재 나이트의 위치 입력받기
data = input()
row = int(data[1])
# a -> 1, b -> 2, ...로 나타내기
col = int(ord(data[0])) - int(ord('a')) + 1
# 나이트가 이동할 수 있는 8가지 방향 정의
steps = [(2, 1), (2, -1), (-2, 1), (-2, -1), (1, 2), (-1, 2), (1, -2), (-1, -2)]
# 8가지 방향에 디하여 각 위치로 이동이 가능한지 확인
result = 0
for step in steps:
# 이동하고자 하는 위치 확인
nrow = row + step[1]
ncol = col + step[0]
# 해당 위치로 이동이 가능하다면 카운트 증가
if 1 <= nrow and nrow <= 8 and 1 <= ncol and ncol <= 8:
result += 1
print(result)
'STUDY > 알고리즘' 카테고리의 다른 글
[DFS/BFS] DFS/BFS (1) 개요 (0) | 2023.03.11 |
---|---|
[구현] 구현 (3) 실전 문제 - 게임 개발 (0) | 2023.03.11 |
[구현] 구현 (1) 개요 및 예제 (5) | 2023.03.06 |
[그리디] 그리디 알고리즘 (3) 실전 문제 - 1이 될 때까지 (0) | 2023.03.06 |
[그리디] 그리디 알고리즘 (3) 실전 문제 - 숫자 카드 게임 (0) | 2023.03.06 |
Comments