본문 바로가기
코딩테스트

[백준] 1783 병든 나이트 - python

by CuckooBird 2023. 2. 4.

백준 실버3 1783 병든 나이트 python

https://www.acmicpc.net/problem/1783

 

1783번: 병든 나이트

첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net


문제 이해

위 그림과 같이 모든 경우가 들어가려면 N>=3 & M>=7 이어야 합니다.

 

오른쪽으로만 움직임이 가능하므로 결과값은 M에 영향을 받습니다.

 

만약 나이트가 가본 곳이 4곳 이상이면, 즉, N>=3 && M>=7 이라면,

모든 경우가 들어가야하므로 M은 이미 가로로 7 움직였습니다.  =>  M-7

그리고 움직인 시점에서 가본 곳이 5곳이므로 ans = M-7+5 입니다.

모든 경우를 쓴 다음에는 오른쪽으로 1만큼 움직이는 것만 생각하므로 이 경우에 대해서는

ans = M-7+5 입니다.

 

그다음 경우는 N<3 인 경우입니다.

N == 1 인 경우에, 움직일 수 없으므로 N = 1 입니다.

N == 2 인 경우에는 최대 3만큼 가볼 수 있는데, (M+1)//2 한 만큼 가볼 수 있습니다.

최대 3만큼 움직이게 된다면 가본 곳이 4이므로 4와 (M+1)//2 중 작은 값을 가져오면 됩니다.

 

그 다음 경우는 M<7 인 경우입니다.

이 경우에도 가볼 수 있는 곳이 최대 4인데요.

4와 M 중 작은 값을 가져오면 됩니다.


코드

import sys
N, M = map(int, sys.stdin.readline().rstrip().split())
ans = 0
if N == 1:
    ans = 1
elif N == 2:
    ans = min(4, (M+1)//2)
elif M < 7:
    ans = min(4, M)
else:
    ans = M - 7 + 5 # 가로 7모두 써버림 & 쓴 다음의 방문한 5곳
print(ans)

Search 🔍

  • min(4, )으로 작은 값을 찾은 점
  • else문 코드줄