문제
Baekjoon 1783: 병든 나이트
- 설명: 오른쪽으로 4방향으로 이동하는 나이트가 있을 때 주어진 체스판에서 가장 많이 움직일 수 있는 칸을 구하여라
풀이
- 주어진 조건
- 나이트는 오른쪽으로만 움직인다.
- 4번 이상 움직이기 위해서는 4가지 움직임을 모두 써야한다.
- 도출할 수 있는 사실
- 세로의 크기는 3 이상이면 위아래 움직임을 상쇄시키면서 오른쪽으로 움직일 수 있으므로 세로의 크기는 1, 2, 3 세가지만 고려하면된다.
- 가로의 크기가 7 (2 + 2 + 1 + 1) 이상이면 4가지 움직임을 모두 쓸 수 있다.
- 정리
- 위의 제한 조건 안에서는 경우의 수를 따져서 값을 구한다.
- 제한 조건을 넘어서는 부분에서는 (위 2, 오 1), (아 2, 오 1)로 반복해서 움직이면 최대한 많은 칸을 움직일 수 있다.
- 따라서 4번 움직인 뒤 (총 5번 움직인 것) 남은 가로 칸을 1칸씩 움직이면 된다 ($m - 7$)
오늘의 회고
- 오른쪽으로는 무한히 증가해야만 한다는 점에서 위의 규칙을 도출 할 수 있었다.
- 조건을 굉장히 상세하게 짰지만 더 간단하게 수식으로 표현할 수 있을 것 같다.
Code
# Baekjoon01783.py
n, m = map(int, input().split())
if n == 1:
ans = 1
elif n == 2:
if m < 3:
ans = 1
elif m < 5:
ans = 2
elif m < 7:
ans = 3
else:
ans = 4
else:
if m == 1:
ans = 1
elif m == 2:
ans = 2
elif m == 3:
ans = 3
elif m <= 6:
ans = 4
else:
ans = 5 + (m - 7)
print(ans)
필수 해시태그: # # # # #
'Problem Solving > 항해99' 카테고리의 다른 글
99클럽 코테 스터디 12일차 TIL + DP (0) | 2025.04.16 |
---|---|
99클럽 코테 스터디 11일차 TIL + 이진탐색 (0) | 2025.04.15 |
99클럽 코테 스터디 8일차 TIL + String (0) | 2025.04.09 |
99클럽 코테 스터디 7일차 TIL + Stack (0) | 2025.04.09 |
99클럽 코테 스터디 6일차 TIL + Graph, DFS (0) | 2025.04.08 |