베오
DCode
베오
전체 방문자
오늘
어제
  • 분류 전체보기 (218)
    • 공지사항 (1)
    • 잡설 (1)
    • Programming (33)
      • [C] (1)
      • [Java] (4)
      • [Python] (2)
      • [Android] (2)
      • [Network] (0)
      • [Operation System] (2)
      • [Spring Boot] (22)
      • [Docker] (0)
    • Algorithm (31)
      • 자료구조 (2)
      • 알고리즘 (Java) (14)
      • 알고리즘 (기초) (15)
    • Coding Test (131)
      • BOJ (131)
      • Algospat (0)
    • 이론적인거 (14)
      • 보안 (5)
      • 오류 해결 (2)
      • 디자인 패턴 (5)
      • 네트워크 (1)
      • 기타 (1)
    • 최신기술 (4)
      • 블록체인 (1)
    • [Project] (1)

블로그 메뉴

  • 🐈‍⬛ GitHub
  • 📫 방명록
  • 🔖 태그

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
베오

DCode

Coding Test/BOJ

[BOJ/JAVA] 1783번: 병든 나이트

2022. 12. 11. 22:00

태그: Java

1783번: 병든 나이트

 

1783번: 병든 나이트

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

www.acmicpc.net

키워드

병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다.

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

여행을 하면서 방문한 칸의 수를 최대로 하려고 한다.

병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다.

이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.


구현

4가지 움직일 수 있는 방법
1423 순서로 갈 때 최소 크기 계산하자
-> 세로 :: 3 // 가로 :: 7
그 다음부터는 1칸씩만 오른쪽으로 이동하면 된다. (2칸 위로, 2칸 아래로)

세로의 크기가 1일 때
-> 이동하지 못함, 1칸

세로의 크기가 2일 때
-> UDUD(최대 4번) 또는 (가로+1)/2 값

가로가 7미만일 때
4가지 방법 전부 쓰기 불가능
최대 4번 또는 가로값
가로가 1인 경우 -> 세로가 2인 경우 2번 // 위에서 걸러짐
가로가 1인 경우 -> 세로가 1인 경우 1번 // 위에서 걸러짐
가로가 1인 경우 -> 세로가 3인 경우 // 1칸 우측으로못감
가로가 2인 경우 -> 세로가 3인 경우 // 2칸
가로가 3인 경우 -> 세로가 3인 경우 // 3칸


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class java_1783 {
    static int N, M;

    static int solution() {
        // 세로의 크기가 1일 때
        // -> 이동하지 못함, 1칸
        if (N == 1) {
            return 1;
        }

        // 세로의 크기가 2일 때
        // -> UDU(최대 4번) 또는 (가로+1/2) 값
        if (N == 2) {
            return Math.min(4, (M + 1) / 2);
        }

        if (M < 7) {
            return Math.min(4, M);
        }

        // 가로가 7미만일 때
        // 4가지 방법 전부 쓰기 불가능
        // 최대 4번 또는 가로값
        // 가로가 1인 경우 -> 세로가 2인 경우 2번 // 위에서 걸러짐
        // 가로가 1인 경우 -> 세로가 1인 경우 1번 // 위에서 걸러짐
        // 가로가 1인 경우 -> 세로가 3인 경우 // 1칸 우측으로못감
        // 가로가 2인 경우 -> 세로가 3인 경우 // 2칸
        // 가로가 3인 경우 -> 세로가 3인 경우 // 3칸

        // 4가지 전부 쓰는 경우
        // 쓴 뒤 위치는 [N-1][6]
        // 5칸을 방문한 상태
        return M - 2;
    }

    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());

        // 무조건 오른쪽으로 간다.

        // 4가지 움직일 수 있는 방법
        // 1423 순서로 갈 때 최소 크기 계산하자
        // -> 세로 :: 3 // 가로 :: 7
        //

        // 그 다음부터는 1칸씩만 오른쪽으로 이동하면 된다. (2칸 위로, 2칸 아래로)

        // 세로의 크기가 1일 때
        // -> 이동하지 못함, 1칸

        // 세로의 크기가 2일 때
        // -> UDUD(최대 4번) 또는 가로/2 값

        // 가로가 7미만일 때
        // 4가지 방법 전부 쓰기 불가능
        // 최대 4번 또는 가로값
        // 가로가 1인 경우 -> 세로가 2인 경우 2번 // 위에서 걸러짐
        // 가로가 1인 경우 -> 세로가 1인 경우 1번 // 위에서 걸러짐
        // 가로가 1인 경우 -> 세로가 3인 경우 // 1칸 우측으로못감
        // 가로가 2인 경우 -> 세로가 3인 경우 // 2칸
        // 가로가 3인 경우 -> 세로가 3인 경우 // 3칸
        int result = solution();

        System.out.println(result);

        br.close();
    }
}

저작자표시 (새창열림)

'Coding Test > BOJ' 카테고리의 다른 글

[BOJ/JAVA] 21758번: 꿀 따기  (0) 2022.12.11
[BOJ/JAVA] 2036번: 수열의 점수  (0) 2022.12.11
[BOJ/JAVA] 14613번: 너의 티어는?  (0) 2022.12.05
[BOJ/JAVA] 1005번: ACM Craft  (1) 2022.12.05
[BOJ/JAVA] 1535번: 안녕  (0) 2022.12.05
    'Coding Test/BOJ' 카테고리의 다른 글
    • [BOJ/JAVA] 21758번: 꿀 따기
    • [BOJ/JAVA] 2036번: 수열의 점수
    • [BOJ/JAVA] 14613번: 너의 티어는?
    • [BOJ/JAVA] 1005번: ACM Craft
    베오
    베오

    티스토리툴바