본문 바로가기
알고리즘 문제

백준 1783

by hyunjing0 2021. 3. 7.
N, M = map(int, input().split())

if N == 1:
    print(1)
elif N == 2:
    print(min(4, (M+1) // 2))
else:
    if M < 7:
        print(min(4, M))
    else:
        print(M-2)

 

답을 알고 나니 코드는 정말 간단했다.

하다 하다 안되서 다른사람들의 풀이를 봤는데 접근방식 자체가 달랐다.

나는 문제를 읽고 나서 나이트가 움직일 수 있는 4가지 경우를 리스트에 담아, 한 번 한 번 움직이려고 했는데 그렇게 

해보니 반복문의 중첩이 많아지고 잘못된 방식으로 풀고있다는 느낌이 들었다.

 

N, M = map(int, input().split())
moves = [(-2, 1), (-1, 2), (1, 2), (2, 1)]
now_row = N
now_column = 1

for move in moves:
    next_row = now_row + move[0]
    next_column = now_column + move[1]

구현문제에서 이렇게 풀었던 적이 있어서 그런지 이런식의 풀이 방법밖에 안떠올랐다.

이 방법은 나이트의 다음위치는 나타낼 수 있지만 움직일 때 마다 반복문을 써야해서 효율적인 풀이가 될 수 없다.

문제에서의 키포인트, 1. 오른쪽으로밖에 이동할 수 없다

2. 4가지 방법을 모두 사용한 후에는 오른쪽으로 한칸 움직이는 것이 최선이다.

는 점을 파악하지 못했다. 

 

 

N과 M을 낮은 숫자부터 차근차근 생각해보면 규칙이 보인다. 

하지만 이렇게 낮은 숫자부터 차근차근 생각해 볼 생각을 못했다,,,,,,,,,, 

그냥 아직 경험이 부족한 것 같다.

'알고리즘 문제' 카테고리의 다른 글

백준 20937  (0) 2021.03.11
백준 2847  (0) 2021.03.11
백준 13305  (0) 2021.03.09
백준 19939  (0) 2021.03.09
백준 1439  (0) 2021.03.06