-문제: https://www.acmicpc.net/problem/1783

 

-정답풀이:

예제를 보니까 뭔가 규칙성이 있어서 탐색 스타일은 아닐 것 같다고 여겼다. 

그리고 지나온 칸 수를 세는 건줄 알았는데, 그게 아니라 주어진 방법대로 움직이고, 멈춘 칸의 갯수를 세는 것이었다.

그걸 기준으로 세보니까 세로 최소 3, 가로 최소 7은 되어야 주어진 방법을 모두 사용할 수 있었고, 

이보다 작은 수들로는 그냥 가능한걸로 아무거나 움직이면 된다. 

이 경우에 따라 모두 나눠야 하기 때문에 어려웠던 것 같다. 

n==3이 기준이니까 이보다 작은 1,2인 상황에 대해서도 작성하면 된다 

 

n==2일 때 min(4,(m+1)//2)가 이해가지 않았는데, 

2x1일 때는 1, 2x2일 때는 1, 2x3일 때는 2, 2x4일 때는 4, m>=4이상이면 움직일 수 없다(4칸은 지나쳐왔기때문에 이전과는 다른 방법으로 진행해야하는데, 세로 칸 수 때문에 할 수 없다)는 것을 써보니까 이해가 됐다

 

n>=3일 때, 가로가 6이하면 1,2,3,4 순서로 진행되고, m이 5,6일 때는 4보다 더 움직일 수 없다

 

m-2는 왜 하는 걸까??

 

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

if n == 1:
    print(1)
elif n == 2:
    print(min(4,(m+1)//2))
else: #n>=3
    if m<=6:
        print(min(4,m))
    else:
        print(m-2)

 

+ Recent posts