백준 1783번(파이썬):병든 나이트
백준 1783번 문제 정리글 입니다.
문제 출처-https://www.acmicpc.net/problem/1783
문제 내용
나의 풀이
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)
- 우선
n<3
일 때는 위아래 1칸 이동 후 오른쪽 이동만 가능, n>=3일 때는 모든 방법으로 이동가능 (n=1일 때는 이돈 불가라 무조건 1개 시작점만 방문)n=2
→ 오른쪽으로 두칸 이동만 가능하여 두칸 씩 이동, 하지만 4회 이상 이동시 모든 방법을 1회이상 해야하므로 m>=7부터는 4칸 이후로 방문 불가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함수를 사용하여 더욱 간단하게 구현했다. 조건 처리는 비슷했다.
해결한 후
조건을 나눌 때 항상 고민하고 끝까지 시도하는게 중요한것 같다.