현제의 현재이야기

[백준/python] 1331 - 나이트투어 본문

algorithm

[백준/python] 1331 - 나이트투어

현재의 현제 2022. 9. 27. 22:40

 

1331번: 나이트 투어

나이트 투어는 체스판에서 나이트가 모든 칸을 정확히 한 번씩 방문하며, 마지막으로 방문하는 칸에서 시작점으로 돌아올 수 있는 경로이다. 다음 그림은 나이트 투어의 한 예이다. 영식이는 6×

www.acmicpc.net

chess = [[0] * 6 for _ in range(6)]
order = []
cnt = 0
for _ in range(36):
    target = input()
    target = list(target)
    if target[0] == "A":
        target[0] = 1
        target[1] = int(target[1])
        order.append(target)
    elif target[0] == "B":
        target[0] = 2
        target[1] = int(target[1])
        order.append(target)
    elif target[0] == "C":
        target[0] = 3
        target[1] = int(target[1])
        order.append(target)
    elif target[0] == "D":
        target[0] = 4
        target[1] = int(target[1])
        order.append(target)
    elif target[0] == "E":
        target[0] = 5
        target[1] = int(target[1])
        order.append(target)
    elif target[0] == "F":
        target[0] = 6
        target[1] = int(target[1])
        order.append(target)

for x, y in order:
    if cnt != 0:
        if (abs(order[cnt][0] - order[cnt-1][0]) == 1 and abs(order[cnt][1] - order[cnt-1][1]) == 2) or (abs(order[cnt][0] - order[cnt-1][0]) == 2 and abs(order[cnt][1] - order[cnt-1][1]) == 1):
            pass
        else:
            print("Invalid")
            quit()     
    if chess[x-1][y-1] == 1:
        print("Invalid")
        quit()
    elif chess[x-1][y-1] == 0:
        chess[x-1][y-1] = 1
    cnt += 1

if (abs(order[0][0] - order[35][0]) == 1 and abs(order[0][1] - order[35][1]) == 2) or (abs(order[0][0] - order[35][0]) == 2 and abs(order[0][1] - order[35][1]) == 1):
    print("Valid")
else:
    print("Invalid")

| 알고리즘

우선 들어온 나이트들의 경로를 숫자로 바꾸어주고,  첫번째 for문에서 첫번째 if문이 나이트의 이동경로인가 확인해주고, 두번째 if문이 이미 방문한 이동경로인지 확인해고, 방문하지 않았다면 1로 바꾸어준다.

 그리고 마지막에 첫번째 이동경로와 마지막 이동경로가 나이트의 경로인지 확인해준다.

| 알게된 점 및 후기

typeerror: 'str' object does not support item assignment

에러가 났었는데, 문자열은 인덱싱을 통해 값을 바꾸어 주는 것이 안됐다. 그래서 order를 list로 바꾸어준 후 인덱스를 통해서 바꾸고 append해주었다.

오랜만에 시간을 재면서 풀었는데 30분정도 걸렸다. 이런 쉬운 문제는 시간을 정하고 푸는 연습을 해야겠다.

Comments