본문 바로가기
백준/그리디

백준 1783. 병든 나이트

by 29살아저씨 2021. 8. 18.
반응형

🅰 백준 1783. 병든 나이트

 

1783번: 병든 나이트

첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

✏️ 문제 풀이

  • 이동횟수가 4번보다 적지 않다면 이동 방법을 모두 한 번씩 사용해야 한다는 조건이 있다. 
  • 무조건 오른쪽으로만 이동할 수 있고 높이가 1,2,3일때로 구분을 해서 문제를 풀었다.
  • 높이가 1일 때 : 한 칸도 이동할 수 없기 때문에 방문한 블록 : 1
  • 높이가 2일 때
    • 가로가 8보다 작거나 같으면 (가로+1)/2 만큼 블록을 방문 가능
    • 가로가 8보다 크면 4가지 블록만 방문 가능
  • 높이가 3일 때
    • 높이가 3이고 넓이가 7미만일 때(이동횟수가 4번보다 적을 때) : 넓이가 4보다 작으면 M만큼 이동, 그 외에는 4번 방문 출력
    • 높이가 3이고 넒이가 7이상일 때 : M-2만큼 이동 가능

✏️ 소스코드

package greedy;

/*
 * 백준 1783. 병든 나이트
 **/
import java.io.*;
import java.util.*;

public class Main_실버4_1783_손은성 {

	public static void main(String[] args) throws Exception {
		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());

		// 높이가 1일 때 
		if (N == 1) {
			System.out.println(1);
		}
		// 높이가 2일 때
		else if (N == 2) {
			if (M <= 8)
				System.out.println((M+1)/2);
			else
				System.out.println(4);
		}
		// 높이가 3일 때
		else if (N >= 3) {
			// 높이가 3이고 넓이가 7 미만일 때
			if (M < 7) {
				if (M <= 4)
					System.out.println(M);
				else
					System.out.println(4);
			} 
			// 높이가 3이고 넓이가 7 이상일 때
			else {
				System.out.println(M - 2);
			}
		}
	}
}

 

✅ 후기

  • 실버 4문제임에도 불구하고 생각하는데 어려움이 있어서 구글을 참고해서 풀었다. 그리디는 모든 경우의 수를 생각하고 조건을 잘 생각해서 구현하는게 중요하다고 느꼈다.
반응형

'백준 > 그리디' 카테고리의 다른 글

백준 1080. 행렬  (0) 2021.08.18
백준 2875. 대회 or 인턴  (0) 2021.08.18
백준 1744. 수 묶기  (0) 2021.08.17
백준 1541. 잃어버린 괄호  (0) 2021.08.17
백준 11399. ATM  (0) 2021.08.17

댓글