1783번 : 병든 나이트 - Python

FriOct·2023년 5월 4일
0

PS

목록 보기
89/108

문제

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

풀이

문제의 조건중에 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다.는 조건이 있다. 그렇다면 이동 방법을 모두 사용하지 못하는 경우를 살펴 보자.

  1. 세로의 길이가 1인 경우 : 세로의 길이가 1인 경우는 이동을 아예 못하기 때문에 이동 횟수가 0이다. 즉, 방문할 수 있는 칸의 갯수는 0이다.

  2. 세로의 길이가 2인 경우 : 세로의 길이가 2인 경우는 1, 4번 방법을 사용할 수 없기 때문에 4번 미만의 이동을 할 수 밖에 없다. 여기서 가로의 길이가 중요한데, 가로의 길이가 7보다 클 경우(7초과인 경우)에는 2, 3번을 이용해서 4번이상을 이동할 수 있지만, 조건에 안 맞기 때문에, 44(M+1)/2(M+1)/2중에 작은 값이 칸의 갯수이다.

  3. 가로의 길이가 7미만인 경우 : 4가지 방법을 다 사용할 수 없다.(최소 7칸이 필요하다.) 그렇기에 44MM중에 작은 값이 칸의 갯수이다.

그 외의 경우에는 M7+5M-7+5이 칸의 갯수이다.

코드

from sys import stdin

input = stdin.readline

n, m = map(int,input().split())

#세로가 1인 경우
if n==1:
    print(1)
#세로가 2인경우
elif n==2:
    print(min((m+1)//2,4))
#가로가 7미만인 경우
elif m<7:
    print(min(4,m))
#그 외
else:
    print(m-7+5)
profile
꿈 많은 개발자

0개의 댓글