https://www.acmicpc.net/problem/1783

코드설명

구현(Implementation) + 그리드(Greedy, 탐욕법) + 많은 조건 분기(If Else) 문제입니다.

 

코드 구현하며, 75퍼센트 정도에서 계속해서 오류가 나왔었습니다.

관련 입력 예시는

3 7

출력 예시

5

로 알 수 있었습니다.

 

그림을 그렸을떄, 

  1. 2칸 위로, 1칸 오른쪽
  2. 1칸 위로, 2칸 오른쪽
  3. 1칸 아래로, 2칸 오른쪽
  4. 2칸 아래로, 1칸 오른쪽

3x7 개의 행렬에서 처음에 해당 행렬에서 최대의 칸을 방문하기 위해 총 4개를 생각했었습니다

.하지만, 잘 생각해보면 1번 방법 -> 4번 방법 -> 2번 방법 -> 3번 방법으로 총 4번 이동(첫칸은 포함하니 최대 5개)가 나옵니다.

코드

package Main;

import java.util.*;
import java.io.*;

public class Main {
    public static int N, M;
    public static int[] arr;
    public static int answer = 0;
    public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
        
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
	
		//만약 N == 1이라면, 
		if(N == 1) {
			System.out.println(1);
			return ;
		}
		
		//만약 N이 3보다 작다면,
		else if(N == 2) {
			if(M <= 8) {
				if(M%2 == 0) {
					System.out.println(M/2);
				}else {
					System.out.println(M/2 + 1);				
				}
			}
			else if(8 < M) {
				System.out.println(4);
			}
			return ;
		}
		
		else if(N >= 3) {
			//만약 M이 5이하라면, 최대 4개가 가능하므로 모든 방향으로 갈 필요가 없다.
			if(M <= 4) {
				System.out.println(M);
				return ;
			}
			else if(5 <= M && M <= 6) {
				System.out.println(4);
			}
			
			//M이 4 초과라면, 4가지 방향 모두 이동하는데, 이떄 중요한점은, 2칸 오른쪽으로 두번 이동한다는 것 이다. 즉, M개에서 2개를 뺴야한다.
			else if(7 <= M) {
				System.out.println(M - 2);
			}
			
			
		}
		
	}
    
    
}

+ Recent posts