백준 1783번(파이썬):병든 나이트

백준 1783번 문제 정리글 입니다.

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

문제 내용

백준 10610번

나의 풀이

    n,m=map(int,input().split())
    count=1
    
    if n<3:
        if n==1:
            count+=0
        else:
            if m<=6:
                count+=(m-1)//2
            else:
                count+=3    
    else:
        if m<=4:
            count+=m-1
        elif m==5 or m==6:
            count+=3
        else:
            count+=m-3

    print(count)
  1. 우선 n<3일 때는 위아래 1칸 이동 후 오른쪽 이동만 가능, n>=3일 때는 모든 방법으로 이동가능 (n=1일 때는 이돈 불가라 무조건 1개 시작점만 방문)
  2. n=2 → 오른쪽으로 두칸 이동만 가능하여 두칸 씩 이동, 하지만 4회 이상 이동시 모든 방법을 1회이상 해야하므로 m>=7부터는 4칸 이후로 방문 불가
  3. n>3 → m<=4: 최대한 1칸씩 이동, m=5,6: 모든 방법 1회이상 사용 불가로 4칸, m>=7: 모든 방법 1회이상과 최대 방문으로 두칸 방문을 한번씩 수행한 후 나머지칸 방문은 모두 1칸이동 방법으로 방문

풀이를 본 후

    n, m = map(int, input().split())
    if n == 1:
        print(1)
    elif n == 2:
        print(min(4, (m+1)//2))
    elif m <= 6:
        print(min(4, m))
    else:
        print(m-2)

m의 경우를 min함수를 사용하여 더욱 간단하게 구현했다. 조건 처리는 비슷했다.

해결한 후

조건을 나눌 때 항상 고민하고 끝까지 시도하는게 중요한것 같다.

참조 링크