반응형
Notice
Recent Posts
Recent Comments
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

UP

[백준 1783 : PYTHON] 병든 나이트 본문

알고리즘/그리디

[백준 1783 : PYTHON] 병든 나이트

cijbest 2020. 10. 20. 01:58

문제 풀기 : 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개 미만)에는 이동 방법에 대한 제약이 없다.
체스판의 크기가 주어졌을 때, 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구한다.

문제풀이

최적의 해를 구하는 그리디 문제이다.
처음 문제을 풀 때 병든 나이트가 여행에서 방문할 수 있는 칸의 최대 개수를 구하라고 해서 이동한 칸의 개수를 전부 더하는 줄 알았다.
그러나 전부 구하는 것이 아니라 한 번 이동했을 때의 도착지점의 칸 수 1개를 의미하는 것이었다.

 

이동 방법은

이러한 형태로 움직인다.

 

이동 조건을 살펴보면
- 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다.
- 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제약이 없다.
즉, 이동횟수 <= 3 일 때, 이동 방법에 제약이 없고
이동횟수 >= 4 일 때부터 이동 방법을 최소 한 번씩을 써야한다.

이동 방법이 모두 오른쪽 방향으로 이동하고 행의 방향이 달라지는 점을 고려하면 행의 크기에 따라 조건을 따져주면 된다.

 

N = 1 일 때는 어떠한 조건도 사용할 수 없으므로 이동이 일어나지 않아 방문한 칸의 수는 1이다.

 

N = 2 일 때 (result는 총 방문한 칸의 수이다.)
M = 1, 2 -> result = 1
M = 3, 4 -> result = 2
M = 5. 6 -> result = 3
M >= 7 -> result = 4

 

M = 1 -> result = 1
M = 2 -> result = 2
M = 3 -> result = 3
M = 4 -> result = 4
M = 5 -> result = 4
M = 6 -> result = 4 : 6일 때는 4가지 이동방법을 사용하지 않았으므로 이동하지 않는다.
M = 7 -> result = 5
M = 8 -> result = 6
M = 9 -> result = 7
.
.
.

전체코드

# 세로(행) : n, 가로(열) : m
n, m = map(int, input().split())

# 각 행의 크기별로 조건을 푼다.
if n == 1:
    print(1)
elif n == 2:
    print(min(4, (m + 1) // 2))
else:
    if m <= 6:
        print(min(4, m))
    else:
        print(m - 2)
반응형

'알고리즘 > 그리디' 카테고리의 다른 글

[백준 1931 : PYTHON] 회의실 배정  (0) 2020.10.23
[백준 11399 : PYTHON] ATM  (0) 2020.10.20
[백준 10610 : PYTHON] 30  (0) 2020.10.18
[백준 2875 : PYTHON] 대회 or 인턴  (0) 2020.10.18
[백준 11047 : PYTHON] 동전 0  (0) 2020.10.18
Comments