728x90
문제
행복 왕국의 왕실 정원은 체스판과 같은 8 X 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서 있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다.
나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다. 나이트는 특정한 위치에서 다음과 같은 2가지 경우로 이동할 수 있다.
- 수평으로 두 칸 이동한 뒤, 수직으로 한 칸 이동
- 수직으로 두 칸 이동한 뒤, 수평으로 한 칸 이동
이처럼 8 X 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오. 이 때 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h로 표현한다.
입출력 예시
입력 : a1
출력 : 2
입력 : c2
출력 : 6
point = input()
count = 0
# x, y 좌표와 더했을 때 8 X 8 평면 밖으로 벗어나는 것을 계산하기 위한 기준 선언
judge = [(-2,-1), (-2, 1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2)]
# 알파벳과 숫자를 나누어 저장
a, b = list(point)
# index 표시가 0부터 시작하는 것이 개인적으로 익숙하기 때문에 0부터 설정
x = ord(a) - 97
y = int(b) - 1
# 현재 좌표 x, y 와 기준 좌표 a, b 를 더하여 판단
for a, b in judge:
if not (x + a < 0 or y + b < 0 or x + a > 7 or y + b > 7):
count += 1
print(count)
"이것이 코딩테스트다 - 나동빈 저" 도서에 나오는 실전 문제 중 하나이다.
책에 나오는 답안 예시를 보지 않고 풀었는데 책에 있는 답안과 비슷하게 풀었다는 것에 놀랐다. ord( )를 쓰지 않고 a,b,c,d,e,f,g,h 도 똑같이 1부터 8까지 딕셔너리로 할까 하다가 귀찮아서 아스키코드로 했는데 역시나 잘한 것 같다. 난이도는 별로 어렵지 않은 문제였다.
300x250
'코딩코딩' 카테고리의 다른 글
[백준] 1260번 : DFS와 BFS - 파이썬 풀이 (0) | 2021.06.16 |
---|---|
[이코테] 음료수 얼려 먹기 - 파이썬 (0) | 2021.06.12 |
[프로그래머스] level2 - 짝지어 제거하기 : 파이썬(Python) 풀이 (2) | 2021.05.26 |
[프로그래머스] level1 - 로또의 최고순위와 최저순위 : 파이썬(Python) 풀이 (0) | 2021.05.25 |
[프로그래머스] level1 - 신규 아이디 추천 : 파이썬(Python) 풀이 (0) | 2021.05.04 |