1. 왕실의 나이트
- 난이도
- 하
- 풀이 시간
- 20분
- 시간 제한
- 1초
- 메모리 제한
- 128MB
A. 문제
- 하
- 20분
- 1초
- 128MB
8 x 8 좌표평면.
나이트는 L자 형태로만 이동할 수 있고, 정원 밖으로 나갈 수 없다.
- 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
- 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
행 위치는 1~8로 표현하고, 열 위치는 a~h로 표현한다.
나이트가 이동할 수 있는 경우의 수를 출력하라.
a. 예를 들면.
- 나이트의 위치가 a1일 때 이동할 수 있는 경우의 수는 2가지다.
- 오른쪽으로 두 칸 이동 후 아래로 한 칸 이동하기 (c2)
- 아래로 두 칸 이동 후 오른쪽으로 한 칸 이동하기 (b3)
b. 입력 조건
- 첫째 줄에 8x8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 문자는 a1과 같이 열행으로 이뤄진다.
c. 출력 조건
- 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하라.
d. 테스트 케이스
입력 예시
a1
출력 예시
2
B. 내 답안
n = input()
x_full = {'a': 1,
'b': 2,
'c': 3,
'd': 4,
'e': 5,
'f': 6,
'g': 7,
'h': 8}
# y_limit = '8'
x = x_full[n[0]]
y = n[1]
count = 0
# count = count + 1
# one_commend = [1, 1, ]
# two_commend = []
# if x + 2 < 9 or x - 2 > 0:
# if y + 1 < 9 or y - 1 > 9:
commands = [['l','l','u'],
['l','l','d'],
['r','r','u'],
['r','r','d'],
['u','u','l'],
['u','u','r'],
['d','d','l'],
['d','d','r']]
for command in commands:
x_copy = int(x)
y_copy = int(y)
for move in command:
if move == 'l':
x_copy = x_copy - 1
elif move == 'r':
x_copy = x_copy + 1
elif move == 'u':
y_copy = y_copy + 1
elif move == 'd':
y_copy = y_copy - 1
if x_copy > 0 and x_copy < 9 and y_copy > 0 and y_copy < 9:
count = count + 1
print(count)
a. 회고
반성
- a, b, c를 보고 c언어에서 아스키 코드 변환이 생각났다. 그런데 파이썬에서 아스키코드 변환하는 법은 기억하지 못했다.
- x축과 y축이 이동하는 것이 익숙치 않아서 헤맸다.
C. 문제 해설
- 오른쪽으로 두 칸 이동 후 아래로 한 칸 이동하기 (c2)
- 아래로 두 칸 이동 후 오른쪽으로 한 칸 이동하기 (b3)
- 첫째 줄에 8x8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 문자는 a1과 같이 열행으로 이뤄진다.
c. 출력 조건
- 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하라.
d. 테스트 케이스
입력 예시
a1
출력 예시
2
B. 내 답안
n = input()
x_full = {'a': 1,
'b': 2,
'c': 3,
'd': 4,
'e': 5,
'f': 6,
'g': 7,
'h': 8}
# y_limit = '8'
x = x_full[n[0]]
y = n[1]
count = 0
# count = count + 1
# one_commend = [1, 1, ]
# two_commend = []
# if x + 2 < 9 or x - 2 > 0:
# if y + 1 < 9 or y - 1 > 9:
commands = [['l','l','u'],
['l','l','d'],
['r','r','u'],
['r','r','d'],
['u','u','l'],
['u','u','r'],
['d','d','l'],
['d','d','r']]
for command in commands:
x_copy = int(x)
y_copy = int(y)
for move in command:
if move == 'l':
x_copy = x_copy - 1
elif move == 'r':
x_copy = x_copy + 1
elif move == 'u':
y_copy = y_copy + 1
elif move == 'd':
y_copy = y_copy - 1
if x_copy > 0 and x_copy < 9 and y_copy > 0 and y_copy < 9:
count = count + 1
print(count)
a. 회고
반성
- a, b, c를 보고 c언어에서 아스키 코드 변환이 생각났다. 그런데 파이썬에서 아스키코드 변환하는 법은 기억하지 못했다.
- x축과 y축이 이동하는 것이 익숙치 않아서 헤맸다.
C. 문제 해설
입력 예시
a1
출력 예시
2
B. 내 답안
n = input()
x_full = {'a': 1,
'b': 2,
'c': 3,
'd': 4,
'e': 5,
'f': 6,
'g': 7,
'h': 8}
# y_limit = '8'
x = x_full[n[0]]
y = n[1]
count = 0
# count = count + 1
# one_commend = [1, 1, ]
# two_commend = []
# if x + 2 < 9 or x - 2 > 0:
# if y + 1 < 9 or y - 1 > 9:
commands = [['l','l','u'],
['l','l','d'],
['r','r','u'],
['r','r','d'],
['u','u','l'],
['u','u','r'],
['d','d','l'],
['d','d','r']]
for command in commands:
x_copy = int(x)
y_copy = int(y)
for move in command:
if move == 'l':
x_copy = x_copy - 1
elif move == 'r':
x_copy = x_copy + 1
elif move == 'u':
y_copy = y_copy + 1
elif move == 'd':
y_copy = y_copy - 1
if x_copy > 0 and x_copy < 9 and y_copy > 0 and y_copy < 9:
count = count + 1
print(count)
a. 회고
반성
- a, b, c를 보고 c언어에서 아스키 코드 변환이 생각났다. 그런데 파이썬에서 아스키코드 변환하는 법은 기억하지 못했다.
- x축과 y축이 이동하는 것이 익숙치 않아서 헤맸다.
C. 문제 해설
n = input()
x_full = {'a': 1,
'b': 2,
'c': 3,
'd': 4,
'e': 5,
'f': 6,
'g': 7,
'h': 8}
# y_limit = '8'
x = x_full[n[0]]
y = n[1]
count = 0
# count = count + 1
# one_commend = [1, 1, ]
# two_commend = []
# if x + 2 < 9 or x - 2 > 0:
# if y + 1 < 9 or y - 1 > 9:
commands = [['l','l','u'],
['l','l','d'],
['r','r','u'],
['r','r','d'],
['u','u','l'],
['u','u','r'],
['d','d','l'],
['d','d','r']]
for command in commands:
x_copy = int(x)
y_copy = int(y)
for move in command:
if move == 'l':
x_copy = x_copy - 1
elif move == 'r':
x_copy = x_copy + 1
elif move == 'u':
y_copy = y_copy + 1
elif move == 'd':
y_copy = y_copy - 1
if x_copy > 0 and x_copy < 9 and y_copy > 0 and y_copy < 9:
count = count + 1
print(count)
반성
- a, b, c를 보고 c언어에서 아스키 코드 변환이 생각났다. 그런데 파이썬에서 아스키코드 변환하는 법은 기억하지 못했다.
- x축과 y축이 이동하는 것이 익숙치 않아서 헤맸다.
C. 문제 해설
나이트가 이동할 수 있는 경로를 하나씩 확인하여 이동하면 된다. 다만 8x8 좌표 평면을 벗어나지 않도록 꼼꼼하게 검사하는 과정이 필요하다.
현재 위치를 기준으로 아래쪽과 오른쪽은 양수의 값을, 위쪽과 왼쪽은 음수의 값을 대입하였다.
a. 책 답안
python-for-coding-test/3.py at master · ndb796/python-for-coding-test (github.com)
참고문헌
나동빈, "이것이 취업을 위한 코딩 테스트다 with 파이썬", 초판, 2쇄, 한빛미디어, 2020년
#코딩테스트 #파이썬 #나동빈 #한빛미디어 #구현 #왕실의나이트 #문제 #풀이
Ghost