알고리즘/항해99 알고리즘
항해99 미들러 알고리즘 10일차
홍박스
2025. 4. 13. 22:07
728x90
BOJ1783 병든 나이트
핵심 조건
- 시작 위치는 왼쪽 아래 모서리입니다. (좌표로 보면 (N, 1) 위치)
- 방문한 칸 수가 5 이상이면, 4가지 이동 방식 모두 한 번 이상 사용해야 함.
- 방문한 칸 수가 4 이하면, 어떤 방법을 쓰든 상관 없음.
결론
1. N == 1 (세로 한 줄)
- 위아래로 움직일 수 없어서 오른쪽으로만 이동 가능함.
- 따라서 제자리만 포함, 최대 1칸 방문.
✅ 정답: 1
2. N == 2 (세로 2줄)
- 위로 2칸, 아래로 2칸 이동 못 함. 가능한 이동은 2번, 3번뿐.
- 오른쪽으로 두 칸씩 이동만 가능하므로,
- (M - 1) // 2 + 1 칸 방문 가능 (처음 위치 포함)
✅ 정답: min(4, (M + 1) // 2)
(4번 이상 이동해도 4가지 방식은 못 쓰니까 제한)
3. N >= 3 (세로 3줄 이상)
- 4가지 이동 전부 사용 가능.
- 단, M이 7 이상이어야 모든 이동 방식 다 쓸 수 있음.
- 📌 M < 7: 이동 방식 모두 사용 못 하므로, 최대 4칸까지만 가능
- ✅ 정답: min(4, M)
- 📌 M >= 7:
- 정답: M - 2
- 처음 두 칸은 제약 때문에 못 씀 (다양한 이동 사용 위한 최소 거리 확보)
- 정답: M - 2
코드
package hanghee99_Middler;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class hh10_BOJ1783 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int count = 0;
if(n == 1){
count = 1;
} else if(n == 2){
count = Math.min(4, ((m+1)/2));
} else if(m<7){
count = Math.min(4,m);
} else if(m>=7){
count = m -2;
}
System.out.println(count);
}
}
728x90