코딩테스트/BOJ

[백준][그리디] 1783. 병든 나이트

박소민 2024. 3. 7. 00:15
1783. 병든 나이트
 

1783번: 병든 나이트

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

www.acmicpc.net

 

  • 내 풀이
    • 이동횟수가 4이상이면 전체를 도는 경우로 따져야 해서 4가 되어야한다.
    • 전체 방법을 한번씩 한 이후에도 더 이동할 수 있는 경우
      • 나는 앞에서 최대한 많이 이동할 수 있는 1,3번 방법의 수 + 2,4 한번씩 해서
      • 2,4를 위한 공간을 뺀 m-5 에 +2 (2,4두가지방법) + 1 (첫 위치)
      • = m-5+2+1 = m-2 로 두었다
    • 1,3번이 불가능한 경우
      • 나는 n-1//2 <0 일때로 두었지만, 이게 결국 n==2 일 경우
      • m<7 인 경우는 무조건 4이하기 때문에 ((m-1)//2)+1 로 두었지만 
      • 사실 나눌 필요 없이 둘다 min(4, ((m-1)//2)+1) 로 합쳐도 됐을 것
n, m = map(int, input().split())
answer = 0
if n < 2 or m < 2:
    print(1)
    exit()

if m-5 < 2:
    if n == 2:
        answer = ((m-1)//2)+1
    else:
        answer = min(4, m)
else:
    if (n-1)//2 > 0:
        answer = m-2  # m-5+2+1
    else:  # n==2일때랑 같음
        answer = min(4, ((m-1)//2)+1)

print(answer)

 

 

  • 다른 사람 풀이
출처:  https://kill-xxx.tistory.com/entry/Python-그리디-알고리즘백준-1783번-병든-나이트-풀이-자세한-그림-풀이
[개발바닥 꼬순내:티스토리]
n, m = map(int, input().split())

result = 0
# n이 1일 때 무조건 1
if n == 1:
  result = 1
# n이 2일 때
elif n == 2: 
  if m >= 1 and m <= 6: #m이 1~6일 때
    result = (m + 1) // 2 
  elif m >= 7: #7이상일 때
    result = 4
# n이 3 이상일 때
elif n >= 3: 
  if m <= 6: #m이 1~6일 때
    result = min(m, 4)
  elif m >= 7: #m이 7 이상일 때
    result = m - 2
print(result)