- 문제
입력 조건
• 첫째 줄에8 X 8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1 처럼 열과 행으로 이뤄진다.
출력 조건
• 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오.
입력 예시
a1
출력 예시
2
처음 짠 코드
state = input()
state = list(state)
steps = [(-1,-2),(-2,-1),(-2,1),(-1,2),(1,-2),(2,-1),(2,1),(1,2)]
count =0
x = int(state[1])
y = int(ord(state[0])-ord('a')+1)
for step in steps:
xs = x + step[0]
ys = y + step[1]
if xs>=1 and xs <=8 and ys>=1 and ys<=8:
count+=1
print(count)
정답 코드
# 현재 나이트의 위치 입력받기
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0])) - int(ord('a')) + 1
# 나이트가 이동할 수 있는 8가지 방향 정의
steps = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)]
# 8가지 방향에 대하여 각 위치로 이동이 가능한지 확인
result = 0
for step in steps:
# 이동하고자 하는 위치 확인
next_row = row + step[0]
next_column = column + step[1]
# 해당 위치로 이동이 가능하다면 카운트 증가
if next_row >= 1 and next_row <= 8 and next_column >= 1 and next_column <= 8:
result += 1
print(result)
느낀점
처음에 ord함수를 사용해서 칼럼 위치를 입력받는 법을 떠올리지 못해 애를 먹었었다. 또한 dx,dy를 활용하는 방법 이외에 step을 활용하는 방법도 있다는걸 알았다.
앞으로는 이러한 지식을 습득했으니 이를 바탕으로 문제를 더욱 다양한 시각에서 바라봐야겠다.
참고
- 이것이 취업을 위한 코딩 테스트다. with python