[Alg] Implementation - 왕실의 나이트

meredith·2021년 7월 29일
0

Alg

목록 보기
7/9

왕실의 나이트

문제 상황
: 8x8 좌표 평면 공간
특정한 한 칸에 나이트가 서 있다.
나이트가 이동할 때는 L자 형태로만 이동 가능
이동 가능한 2가지 경우
1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기

행 위치 : 1~8
열 위치 : a~h

Input : str (str[0] : 열, str[1] : 행)
Output : int (나이트가 이동한 총 횟수)

내가 작성한 코드

input = input()

row = int(input[1])
column = ord(input[0]) - 96

count = 0

steps = [(-2,1), (-2,-1), (2,1), (2,-1), (1,2), (1,-2), (-1,2), (-1,-2)]

for dx,dy in steps:
    if row+dx > 0 and row+dx <= 8:
        if column+dy > 0 and column+dy <= 8:
            count += 1

print(count)

답안 예시

input_data = input()

row = int(input_data[1])
column = int(ord(input_data[0])) - int(ord('a')) + 1

steps = [(-2,-1), (-1,-2), (1,-2), (2,-1), (2,1), (1,2), (-1,2), (-2,1)]

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)

code review

우선, input value의 column 값을 아스키값으로 바꾸는 생각이 좀 어려웠다.
아스키 코드를 평소 잘 사용하지 않아서 그런지, 오랜만에 봤다.

ord() 함수 : 문자열 -> 아스키값
(python category에 정리함)

그리고 steps 리스트 만드는 것도 좀 오래걸렸다.
모든 경우의 튜플 리스트를 만드는게 아니라 상하좌우 문제처럼 묶어서(?) 쓸 수 있는 리스트를 짜려고 생각하다보니 오히려 꼬인 것 같다.

여기 코드에서 steps가 '상하좌우'문제에서의 dx,dy 변수의 기능을 대신하여 수행

⭐️ 2가지 형태 모두 자주 사용되므로 알아두기

profile
해보자고 가보자고

0개의 댓글