새소식

Programming/Algorithm

[구현 알고리즘] 문제: 왕실의 나이트

  • -

https://www.youtube.com/watch?v=2zjoKjt97vQ&t=1326s

본 내용은 위의 유투브를 참고했음을 밝힙니다!

<문제> 왕실의 나이트

출처: 동빈나 유투브
출처: 동빈나 유투브

 

풀이 과정
* 음.. LRUD문제랑 관련이 있는 것 같긴 한데..
* 8 * 8 matrix이니까 나올 수 있는 경우의 수가 한정적이긴 한 것 같다. 
* (1, 1) -> (3, 2), (2, 3) 2개: +2, +1 or +1, +2
* (1, 2) -> (2, 4), (3, 3), (3, 1): 여기서는 +2, -1이 추가 됨
* 그러니까 정리해보면 
    * (+1, +2), (+2, +1) 
    * (+2, -1), (-1, +2)
    * (-2, +1), (+1, -2)
    * (-1, -2), (-2, -1)
        * 이렇게 8가지가 나올 수 있는데 이게 범위안에 있어야 한다는 것..
1. x, y 선언 하는 방법. 
2. 위의 내용대로 어떻게 빼는지? 
3. 범위 안에 있는지 확인하기 if, continue?
4. 문자로 입력받는 거 숫자로 처리해서 다시 문자로 넘겨줄 건지, 아니면 그냥 문자로 처리할 건지?
#%%
init = list(input())
x = ord(init[0]) - 96
y = int(init[1])
count = 0
# print(x, y)

dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]

for i in range(4):
    nx = x + 2*dx[i]
    ny = y + dy[i]
    print(nx, ny)
    if nx < 1 or nx > 8 or ny < 1 or ny > 8:
        continue
    count += 1
    print(count)

#%% md
* 이렇게 풀면 무조건 한칸씩?? 만 움직이게 되는 데 
* 수평2 수직 1 or 수직1 수평2 이런식으로 연속적으로 움직이는 걸 어떻게 표현하는 지가 어렵다. 
#%% md
풀이과정
# 현재 나이트의 위치 입력받기
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), (-1, 2), (2, -1), (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)
#%% md
* 아..! 거의 다 했는데 
* steps = [(-2, -1), (-1, -2), (1, -2), (-2, 1), (-1, 2), (2, -1), (1, 2), (2, 1)]
    * 이 부분 리스트로 선언하는 거랑, 그걸로 반복문 돌리는 걸 생각못했다. 
    * 문제 해결 과정은 다 맞춘 것 같은데... 아쉽다. 
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.