Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 자바
- 코테
- implement
- 코딩테스트
- Math
- Binary Search
- SQL
- Method
- Data Structure
- Tree
- hash table
- java
- two pointers
- Stack
- string
- Matrix
- greedy
- dynamic programming
- 파이썬
- Counting
- array
- simulation
- geometry
- Number Theory
- Binary Tree
- Class
- 구현
- sorting
- database
- bit manipulation
Archives
- Today
- Total
코린이의 소소한 공부노트
[백준 온라인 저지] 1783. 병든 나이트 본문
병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.
- 2칸 위로, 1칸 오른쪽
- 1칸 위로, 2칸 오른쪽
- 1칸 아래로, 2칸 오른쪽
- 2칸 아래로, 1칸 오른쪽
병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.
1. 입력
- 첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.
2. 출력
- 병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.
3. 예제
4. 코드
import java.util.*;
class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt(), m = scan.nextInt(), ans = 0;
if(n==1) ans = 1;
else if(n==2){
if((m+1)/2 > 4) ans = 4;
else ans = (m+1)/2;
} else{
if(m>=7) ans = m-2;
else ans = Math.min(m,4);
}
System.out.print(ans);
}
}
- 17728KB, 220ms
- 4가지 움직임을 모두 이용하려면 n은 최소 3, m은 최소 7이어야 한다. 따라서 n<3, m<7일 때는 방문할 수 있는 칸이 5개 미만이기 때문에 각 조건에 맞게 움직일 수 있기만 하면 되고, 나머지 경우에는 4가지 움직임을 소비한 후 위 또는 오른쪽으로 많이 갈 수 있는 경우만 세면 된다.
'코딩테스트 풀이 > JAVA' 카테고리의 다른 글
[백준 온라인 저지] 2812. 크게 만들기 (0) | 2023.06.29 |
---|---|
[백준 온라인 저지] 1969. DNA (0) | 2023.06.29 |
[백준 온라인 저지] 2437. 저울 (0) | 2023.06.29 |
[백준 온라인 저지] 1946. 신입 사원 (0) | 2023.06.29 |
[백준 온라인 저지] 10610. 30 (0) | 2023.06.29 |