반응형
나이트 위치를 입력을 받았을 때 이동할 수 있는 경우의 수를 출력해보자.
def convert(alphabet):
if alphabet == 'a':
return 1
if alphabet == 'b':
return 2
if alphabet == 'c':
return 3
if alphabet == 'd':
return 4
if alphabet == 'e':
return 5
if alphabet == 'f':
return 6
if alphabet == 'g':
return 7
if alphabet == 'h':
return 8
s = input()
x = convert(s[0])
y = int(s[1])
dx = [-2, -2, 2, 2, -1, -1, 1, 1]
dy = [1, -1, 1, -1, 2, -2, 2, -2]
count = 0
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if nx < 1 or nx > 8 or ny < 1 or ny > 8:
continue
count += 1
print(count)
컬럼이 8개밖에 안되므로 a~h 를 1~8 로 convert 하는 함수를 직접 만들었다. 나이트가 이동할 수 있는 전체 경우의 수는 8가지 이므로 for문을 돌면서 전체다 이동해보고 배열 밖을 벗어나는지 체크했다.
책의 정답 코드를 보니 convert 를 직접하지 않고 내장 함수 ord 를 이용했다. ord 함수는 문자를 아스키코드값으로 리턴해준다. 예를 들어 ord('a') 는 97이다. 아래와 같이 입력받은 알파벳 문자에 ord('a') 를 빼고 1을 더함으로써 알파벳과 숫자를 맵핑했다.
input_data = input()
row = int(input_data[1])
column = int(ord(input_data[0])) - int(ord('a')) + 1
그리고 나이트가 이동 가능한 x, y 를 각각 list로 담지 않고 묶어서 담았다.
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)
출처 : 이것이 코딩테스트다 나동빈 저
반응형
'연습' 카테고리의 다른 글
[구현] 럭키 스트레이트 (0) | 2021.11.14 |
---|---|
[구현] 게임 개발 (0) | 2021.11.08 |
[그리디] 숫자 카드 게임 (2) | 2021.10.24 |
[그리디] 무지의 먹방 라이브 (0) | 2021.10.17 |
[그리디] 볼링공 고르기 (0) | 2021.10.11 |