https://www.acmicpc.net/problem/1783
- 오늘의 학습 키워드
병든 나이트
- 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 세로
int M = sc.nextInt(); // 가로
int result = 0;
if (N == 1) {
// 세로가 1칸 → 못 움직임
result = 1;
} else if (N == 2) {
// 2번, 3번 이동만 가능 (오른쪽으로 2칸씩 이동)
result = Math.min(4, (M - 1) / 2 + 1);
} else if (M < 7) {
// 모든 이동 가능하지만 가로가 짧음 → 4가지 방법 다 못 씀
result = Math.min(4, M);
} else {
// 모든 조건 만족 → 최대 이동 가능
result = M - 2;
}
System.out.println(result);
}
}
문제 파악하고 분기하는 게 중요한 문제였다.
1. N == 1
→ 위아래 이동이 전혀 안 되니까 시작 칸만 방문: 1
2. N == 2
→ 위아래로 2칸 이동 불가
→ 이동 방식 2번, 3번만 가능 → 오른쪽으로 두 칸씩만 가니까 최대 4번 이동
→ (M - 1) / 2번 이동 가능, 시작 포함해야 하니까 +1
3. N >= 3 && M < 7
→ 이동은 다 되지만, 가로가 좁아서 4가지 다 사용 불가
→ 최대 4칸까지 방문
4. N >= 3 && M >= 7
→ 다 가능하니까 그냥 M - 2칸 방문 가능
- 오늘의 회고
문제 이해가 매우 어려웠다.
특히 “이동 횟수가 4번 이상이면 모든 이동 방식을 한 번씩 써야 한다”는 조건이 처음에는 너무 복잡하게 느껴졌고,
병든 나이트의 4가지 이동 방식 자체도 그림 없이 이해하기가 어려웠다. 😭
세로 길이 N과 가로 길이 M에 따라 경우를 나누는 게 핵심이라는 걸 알게 됐고, 아래처럼 4가지 상황으로 나눠서 접근했다
1. N == 1: 이동 불가 → 1칸만 방문
2. N == 2: 2가지 이동만 가능 → 최대 4칸까지 방문 가능
3. N >= 3 && M < 7: 4가지 이동은 불가능 → 최대 4칸 방문
4. N >= 3 && M >= 7: 모든 조건 만족 → M - 2칸 방문 가능
문제에서 말하는 조건을 수학적으로 해석해서 경우를 나누는 연습이 중요하다는 걸 배웠다...
'📝 끄적끄적 > 항해99 코테 스터디' 카테고리의 다른 글
99클럽 코테 스터디 12일차 TIL + 포도주 시식 (0) | 2025.04.15 |
---|---|
99클럽 코테 스터디 11일차 TIL + 과자 나눠주기 (0) | 2025.04.15 |
99클럽 코테 스터디 9일차 TIL + 저울 (0) | 2025.04.10 |
99클럽 코테 스터디 8일차 TIL + 한국이 그리울 땐 서버에 접속하지 (0) | 2025.04.10 |
99클럽 코테 스터디 7일차 TIL + 쇠막대기 (0) | 2025.04.09 |
99클럽 코테 스터디 6일차 TIL + 섬의 개수 (0) | 2025.04.08 |