백준 문제 링크
나이트 투어
- 조건은 아래와 같다.
- 이미 방문했던 곳을 다시 방문하면 안된다.
- 나이트의 이동이므로 현재 위치와 새로운 위치가 범위 안에 있어야한다.
- 마지막으로 이동한 위치와 시작점이 범위 안에 있어야한다.
- 범위를 체크할 함수 check_valid를 만든다.
가로, 세로 차이의 절댓값이 (2,1) 이거나 (1,2)이면 1을 return- 시작점을 now로 지정하고 방문한 곳을 저장할 리스트 temp에 넣어준다.
- 초기값 cnt = 1로 지정하고
35번의 반복문동안 위치를 following에 받아주고 temp에 넣어준다.- check_valid로 now와 following이 범위 안에 있는지 확인하고,
- 범위 안에 있다면 cnt + 1, now = following으로 바꿔준다.
- 범위 안에 없으면 break
- 최종적으로 cnt가 36,
temp(방문한 곳)를 중복제거한 개수가 36,
마지막 위치와 시작이 범위 안에 있다면
Valid를 출력하고
위 조건에 해당하지 않으면 Invalid를 출력한다.
def check_valid(now, following):
if abs(ord(now[0]) - ord(following[0])) == 2 and abs(ord(now[1]) - ord(following[1])) == 1:
return 1
elif abs(ord(now[0]) - ord(following[0])) == 1 and abs(ord(now[1]) - ord(following[1])) == 2:
return 1
else:
return 0
temp = []
now = input()
temp.append(now)
cnt = 1
for i in range(35):
following = input()
temp.append(following)
if check_valid(now, following) == 1:
cnt += 1
now = following
else:
break
if cnt == 36 and len(set(temp)) == 36 and check_valid(temp[0], temp[-1]):
print('Valid')
else:
print('Invalid')