1783번: 병든 나이트
첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
*해결 과정
이 문제는 이동 칸수가 특이합니다. 결론적으로 오른쪽으로만 이동하는 구조입니다.
이 구조를 이용해서 문제를 풀어야합니다. 배열은 최대 각 길이가 20억이 될 수 있기 떄문에 배열을 만들면 터지게 됩니다. 그래서 얼마나 많이 오른쪽으로 잘 이동할 수 있는지 확인합니다. N,M과의 관계를 천천히 살펴봅니다.
n=1 : 이동 불가이므로 1을 반환
n=2 : 2,3만 이동 가능하므로 최대 4번 이동 가능
m<7 : 세로 길이가 충분 할 경우, m에 따라서 6이하는 최대 4번 이동 가능
m-2 : 4방향을 다 돌아야 하기 때문에 가로 m길이에서 어쩔 수 없이 2번을 필수로 이동하므로 -2 이후 계속 오른쪽으로 이동
import java.util.*;
public class Main {
static int n,m;
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
n = sc.nextInt();
m = sc.nextInt();
System.out.println(solve());
}
static int solve() {
if(n == 1) return 1;
if(n == 2) return Math.min(4, (m+1)/2);
if(m < 7 ) return Math.min(4, m);
return m-2;
}
}
이렇게 해결문제를 떠올리는 것은 쉽지 않습니다. 특이한 케이스에 대해서 직접 그림을 그리며 접근하면 좀 더 보일 것 같습니다.
반응형
'Algorithm' 카테고리의 다른 글
[백준/1918] 후위표기식 ( java ) (0) | 2021.01.10 |
---|---|
Union-Find(유니온-파인드) (0) | 2020.11.25 |
연습문제 : 최고의 집합 ( 프로그래머스 / java ) (0) | 2020.11.10 |
깊이/너비 우선 탐색(DFS/BFS) : 네트워크 ( 프로그래머스 / java ) (0) | 2020.11.07 |
깊이/너비 우선탐색(DFS / BFS) : 단어변환 ( 프로그래머스 / java ) (0) | 2020.11.07 |