본문 바로가기
Python/백준 문제 풀이

[BOJ] 1331번 나이트 투어

by 서원두 2023. 1. 14.

[BOJ] 1331번 나이트 투어 문제

간단한 구현 문제다.

먼저 나이트는 날 일日자(가로 2칸과 세로 1칸 또는 가로 1칸과 세로 2칸)로 움직이는 것을 알아야 풀 수 있다. 문제의 핵심은 글에 있는 세 가지 조건을 체크하는 것이다. 조건은 아래와 같다.

  1. 시작한 칸과 끝난 칸을 나이트가 이동할 수 있어야 한다.
  2. 칸에서 칸으로 이동할 때 나이트가 갈 수 있어야 한다.
  3. 움직인 칸이 중복되지 않아야 한다.

이를 코드로 풀어서 쓰면 된다! 조건이 그렇게 어렵지 않기 때문에 코드 짜는 것이 굉장히 간단하다.

import sys

if __name__ == '__main__':
    route = list()
    for _ in range(36):
        route.append(sys.stdin.readline().rstrip())

    if len(set(route)) != 36:
        print('Invalid')
        exit()

    for i in range(36):
        diff_row = abs(ord(route[i][0])-ord(route[i-1][0]))
        diff_col = abs(int(route[i][1])-int(route[i-1][1]))
        if (diff_row == 1 and diff_col == 2) or (diff_row == 2 and diff_col == 1):
            continue
        else:
            print('Invalid')
            exit()

    print('Valid')

 

해당 코드는 순서대로 3번, 1~2번 조건을 체크해 준다. 파이썬에서 list 자료구조가 음수로 받아도 되는 것을 응용해서 1번 조건을 체크해 줬고, 다음 칸과의 체크들이 2번 조건을 체크해 주게끔 해준다.

728x90

'Python > 백준 문제 풀이' 카테고리의 다른 글

[BOJ] 2468번 안전영역  (0) 2023.01.29
[BOJ] 27162번 Yatch Dice  (0) 2023.01.23
[BOJ] 26517번 연속인가? ?  (0) 2023.01.07
[BOJ] 26069번 붙임성 좋은 총총이  (0) 2022.12.31
[BOJ] 9549번 암호화된 비밀번호  (0) 2022.12.03

댓글