
문제 분석
개인적으로 문제 설명이 조금 부족한 면이 있다고 느꼈다. 하지만 예제가 이를 충분히 보완해주었다.
왼쪽으로 가는경우는 없기 때문에 높이에 따라 오른쪽으로 가는 칸수가 정해지게 된다.
예제1번을 보면 가로가50인데 결과가 48이다.
여기서 4개 방법을 모두 가야한다는게 한번만 그렇게 하면되는걸로 이해했다
높이1일경우 출발점을 제외하고 움직일 수 없다.
높이2일경우 2칸씩밖에 이동을 못하고 가로가 아무리 길더라도 4개 방법을 할 수 없기 때문에 최대가 4이다.
시작점, 2칸이동, 2칸이동, 2칸이동 으로 3번까지는 제약없이 움직일 수 있기 때문이다.
높이3일경우 4번 이상이면 -2를 해줘야한다 2개씩 움직이는 경우가 2번 있으니까.
직접 높이2 와 높이3에 대해서 그려보면 좀 더 직관적으로 알 수 있었다.
풀이 후에 아쉬웠던 점은 높이2 일때 swich ~case 문이 아니라 Math.min으로 구현했으면 좀 더 좋았을 것 같았다.
전체 소스
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int depth = Integer.parseInt(st.nextToken());
int wide = Integer.parseInt(st.nextToken());
int result = 1;
if (depth == 1) {
System.out.println("1");
return;
}
if (depth == 2) {
if(wide<8) {
if(wide%2==1) {
result = wide/2;
result ++;
}else {
result = wide/2;
}
System.out.println(result);
}else {
System.out.println("4");
}
return;
}
if (depth > 2 && wide < 8) {
switch (wide) { // 조건
case 1: // 값 불일치(미실행)
System.out.println("1");
break;
case 2: // 값 일치
System.out.println("2"); // 실행
break; // 종료
case 3: // 값 불일치(미실행)
System.out.println("3");
break;
case 4: // 값 일치
System.out.println("4"); // 실행
break; // 종료
case 5:
System.out.println("4");
break;
case 6:
System.out.println("4");
break;
case 7:
System.out.println("5");
break;
}
} else {
result = wide - 2;
System.out.println(result);
}
}
}
https://www.acmicpc.net/problem/1783
1783번: 병든 나이트
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
'알고리즘(BOJ) > Silver' 카테고리의 다른 글
백준 - N과M(1) 15649 (백트래킹) (0) | 2023.03.28 |
---|---|
백준 - 삼각형 만들기 1448 (0) | 2023.03.27 |
백준 - 타이핑 25215 (다이나믹) (0) | 2023.03.25 |
백준 1, 2, 3 더하기 9095 다이나믹 (0) | 2023.03.23 |
백준 - 이친수 2193 (다이나믹) (0) | 2023.03.18 |