본문 바로가기

카테고리 없음

[백준 / Python] 쉬운 계단 수_10844

https://www.acmicpc.net/problem/10844

 

생각

최근 DP와 관련해서 고민이 많았었다.

DP의 개념은 동적 프로그래밍이다.

그냥 간략하게 적자면 한번 계산한 연산을 다시 하지 않도록 테이블에 저장한 후 활용하는 것이다.

하지만 요새 문제를 접할 때 마다, 내가 DP 개념을 활용하는건지, 아니면 그냥 풀었던 문제와 비슷한 방식을 대입해서 푸는건지 헷갈렸었다.

다시 한번 명심해야 할 것은 절대 생각없이 대입해서 풀면 안된다는 점이다.

이 개념들이 왜 탄생했는지 생각하고, 이 문제에 해당 개념이 왜 쓰이는지를 인지해야한다.

위의 백준 문제는 DP의 개념을 다시 한번 집어볼 수 있어서 좋았다.

 

문제 접근 방식

 

처음에는 완전탐색으로 생각을 하다가 DP를 떠올렸다면 괜찮은 접근 방식이였을 것 같다.

DP는 이전의 구했던 값을 다시 활용하는 것이고, 이는 정화식을 가지게 된다.

처음에는 일일이 다 구해보았고, 그러면서 특징을 찾아내 점화식을 구하였다.

n의 값. 즉 자릿수와 관계없이, 맨 마지막 수가 중요하다고 생각했다.

위 그림에서 10, 12가 있는 상태에서 n = 3일때를 구해보자면

생각해야 할 것은 맨 마지막 숫자이다. 뒤에 올 숫자가 맨 마지막 숫자와 1이 차이가 나면 된다.

 

그렇게 해서 n = 1일때 나온 수, 1은 0을 만들어내고, 2~8까지의 수는 각자 자기보다 1이 차이나는 수를 만들어 낸다.

이로 인해 해당 그림이 그려지게 되었고, 점화식을 유추해낼 수 있었다.

 

정답 코드