728x90
반응형
이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저) 4장 구현(Implementation), 시뮬레이션(simulation) 유형의 왕실의 나이트 문제는 8x8 좌표 평면상 내에서 L자 형태로만 이동하는 나이트가 이동할 수 있는 경우의 수를 구하는 문제이다.
이코테 4장 구현 왕실의 나이트 문제 정보
출처
- [한빛미디어] 이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저)
- https://youtu.be/2zjoKjt97vQ
알고리즘 분류
- 구현, 시뮬레이션 (Implementation, simulation algorithm)
왕실의 나이트 문제 요약
- 왕실 정원은 8x8 좌표 평면이다.
- 나이트는 L자 형태로만 이동할 수 있으며 정원 밖으로 나갈 수 없다.
- 나이트는 특정 위치에서 다음과 같이 2가지 경우로 이동할 수 있다.
- 1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기.
- 2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기.
- 왕실의 정원에서 행 위치를 표현할 때에는 1부터 8로, 열 위치는 a부터 h로 표현한다.
- 첫째 줄에 8x8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1처럼 열과 행으로 이뤄진다.
- 나이트가 이동할 수 있는 경우의 수를 구하여 출력한다.
문제 풀이 과정
- 현재 나이트의 위치를 입력받는다.
- 알파벳으로 표현된 나이트 위치의 열을 정수로 바꾼다. (ex. a -> 1, h -> 8)
- 이동할 수 있는 8가지 방향벡터를 정의한다.
- 8가지 방향으로 이동한 후의 위치가 정원 밖이 아니면 이동 가능하므로 카운트한다.
- 카운트한 횟수를 출력한다.
코드 및 설명
- position - 입력받은 현재 나이트의 위치
- column - 왕실 정원의 열 위치를 표현하는 리스트
- col, row - 나이트 현재 위치의 열, 행
- d_col, d_row, steps - 나이트가 이동할 8가지 방향의 열, 행 위치
- count - 이동할 수 있는 경우의 수
- next_col, next_row - 나이트 이동 후의 열, 행 위치
# 풀이 1
position = input()
column = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
col = int(column.index(position[0]) + 1)
row = int(position[1])
d_row = [1, 2, 2, 1, -1, -2, -2, -1]
d_col = [2, 1, -1, -2, -2, -1, 1, 2]
count = 0
for i in range(8):
next_row = row + d_row[i]
next_col = col + d_col[i]
if 1 <= next_row <= 8 and 1 <= next_col <= 8:
count += 1
print(count)
# 풀이 2
position = input()
col = int(ord(position[0]) - ord('a')) + 1
row = int(position[1])
steps = [(1, 2), (2, 1), (2, -1), (1, -2), (-1, -2), (-2, -1), (-2, 1), (-1, 2)]
count = 0
for step in steps:
next_row = row + step[0]
next_col = col + step[1]
if 1 <= next_row <= 8 and 1 <= next_col <= 8:
count += 1
print(count)
문자에 해당하는 유니코드 정수를 반환하는 ord() 함수를 알게 되어 활용을 자주 할 수 있을 것 같다.
이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저) 4장 구현(Implementation), 시뮬레이션(simulation)의 왕실의 나이트 문제를 파이썬 python으로 풀어보았다.
728x90
반응형
'Algorithm Problem Solving > 이코테 (나동빈 저)' 카테고리의 다른 글
[구현] 이코테 문자열 재정렬 (Python / 파이썬) (0) | 2022.06.05 |
---|---|
[구현/완전 탐색/브루트포스] 이코테 시각(Python / 파이썬) (0) | 2022.06.04 |
[그리디/Greedy] 이코테 곱하기 혹은 더하기 (Python / 파이썬) (0) | 2022.06.04 |
[그리디/Greedy] 이코테 1이 될 때까지 (Python / 파이썬) (0) | 2022.06.03 |
[구현/시뮬레이션] 이코테 상하좌우 (Python / 파이썬) (0) | 2022.06.03 |
댓글