BOJ - 1331

주의·2024년 1월 24일
0

boj

목록 보기
104/214

백준 문제 링크
나이트 투어

❓접근법

  1. 조건은 아래와 같다.
  • 이미 방문했던 곳을 다시 방문하면 안된다.
  • 나이트의 이동이므로 현재 위치와 새로운 위치가 범위 안에 있어야한다.
  • 마지막으로 이동한 위치와 시작점이 범위 안에 있어야한다.
  1. 범위를 체크할 함수 check_valid를 만든다.
    가로, 세로 차이의 절댓값이 (2,1) 이거나 (1,2)이면 1을 return
  2. 시작점을 now로 지정하고 방문한 곳을 저장할 리스트 temp에 넣어준다.
  3. 초기값 cnt = 1로 지정하고
    35번의 반복문동안 위치를 following에 받아주고 temp에 넣어준다.
  4. check_valid로 now와 following이 범위 안에 있는지 확인하고,
  • 범위 안에 있다면 cnt + 1, now = following으로 바꿔준다.
  • 범위 안에 없으면 break
  1. 최종적으로 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')

0개의 댓글