KimMinJun
Coding Note
KimMinJun
전체 방문자
오늘
어제
  • 분류 전체보기 (487)
    • ALGORITHM (11)
      • 정렬 (6)
      • 최단경로 (1)
      • 자료구조 (1)
      • 슬라이딩 윈도우 (1)
      • etc (2)
    • Git (5)
    • Web (24)
      • Vanilla JS (13)
      • TS (2)
      • React (7)
      • ETC (1)
    • React 공식문서 (번역, 공부) (11)
      • Quick Start (2)
      • Installation (0)
      • Describing the UI (9)
      • Adding Interactivity (0)
      • Managing State (0)
      • Escape Hatches (0)
    • Next.js 공식문서 (번역, 공부) (3)
      • Getting Started (2)
      • Building Your Application (1)
    • PS (432)
      • 백준 (187)
      • Programmers (105)
      • CodeUp (21)
      • STL (3)
      • 제코베 JS 100제 (50)
      • SWEA (0)
      • LeetCode (65)
    • IT (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • codeup
  • string
  • 정렬
  • programmers
  • C
  • 문자열
  • 그래프
  • LeetCode
  • 수학
  • Level 1
  • 제코베 JS 100제
  • Level 2
  • tree
  • recursion
  • C++
  • Level1
  • 다이나믹 프로그래밍
  • js
  • 백준
  • Level 0

최근 댓글

최근 글

hELLO · Designed By 정상우.
KimMinJun

Coding Note

PS/백준

백준 / 그리디 / 1783번 / 병든 나이트 / Python

2022. 3. 12. 15:40

문제

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

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

병든 나이트는 여행을 시작하려고 하고, 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 
병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다.
이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.

체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구해보자.

입력

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

출력

병든 나이트가 여행에서 방문할 수 있는 칸의 개수중 최댓값을 출력한다.

 

from sys import stdin

n, m = map(int, stdin.readline().split())

if n == 1:  # 행이 1이면 이동불가
    print(1)
elif n == 2:  # 행이 2면 2,3번만 사용가능
    # 이동횟수는 4미만으로
    print(min(4, (m+1)//2))
else:  # 행이 3이상
    # m의 최솟값: 1 + (1 + 2 + 2 + 1)
    # 처음 1칸과, 4번이상 이동할때의 최솟값은 모든 방법 한번씩 이용

    if m < 7:  # 4번 미만으로 이동할 경우
        # 최댓값은 오른쪽으로 한칸씩만 이동할경우
        print(min(4, m))
    else:  # 4번 이상 이동
        # 오른쪽으로 2칸 이동하는 방법은 한번씩,
        # 그 외는 모두 1칸씩 이동해야 최대,
        # 2칸씩 이동하는 경우에만 중간이 빈칸 1개씩 있으므로 열의 개수 - 2
        print(m-2)

 

저작자표시 (새창열림)

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

백준 / 덱(Deque) / 1021번 / 회전하는 큐 / Python  (0) 2022.03.12
백준 / 그리디 / 5585번 / 거스름돈 / Python  (0) 2022.03.12
백준 / 그리디 / 1080번 / 행렬 / Python  (0) 2022.03.12
백준 / 정수론 및 조합론 / 5086번 / 배수와 약수 / C++  (0) 2022.02.05
    'PS/백준' 카테고리의 다른 글
    • 백준 / 덱(Deque) / 1021번 / 회전하는 큐 / Python
    • 백준 / 그리디 / 5585번 / 거스름돈 / Python
    • 백준 / 그리디 / 1080번 / 행렬 / Python
    • 백준 / 정수론 및 조합론 / 5086번 / 배수와 약수 / C++
    KimMinJun
    KimMinJun

    티스토리툴바