그냥 하는 노트와 메모장

BOJ 3001 이상한 문제 본문

Solved problems

BOJ 3001 이상한 문제

coloredrabbit 2020. 6. 3. 17:12

* BOJ 3001 이상한 문제

[분류 : 다이나믹 프로그래밍]


[풀이]

1. [각 자리수 합이 S인 개수]

  구간이 정해져 있으므로 1부터 B까지 합이 S인 것의 개수에서 0부터 A-1까지 합이 S인 것의 개수를 빼준다. 이렇게하면 똑같은 함수를 두 번 호출하는 꼴이 나온다. 

rec(limit, position, summation, A)

※ limit은 주어진 A보다 작은 경우만 세야하므로 제한을 두는 변수다.

  기저영역은 A보다 작은 자리수에 대해 숫자를 채웠고 남은 summation이 0이 되는 경우에 1 더해주면 된다.


2. [A보다 크거나 같고 B보다 작은 수 중 자리수 합이 S가 되는 가장 작은 정수]

  문제 조건에서 적어도 하나 이상의 수가 반드시 존재한다고 했으니 이 값은 A와 가장 가까운 정수를 출력해주시면 되겠다

rec2(limit, position, summation, A)

※ limit은 주어진 A보다 큰 경우만 세야하므로 두는 제한 변수다.(A-1을 넘겨서 호출하면 결국 A와 같거나 큰 경우를 가져온다)


  다소 어려운 점이 있다면 자리수가 자체가 증가할 수 있단 사실이다. 이는 자리수를 하나씩 늘려가면서 가능 여부를 판단해주면 된다. 가능한 자리수 중 가장 짧은 길이일 때 종료시키고 답을 도출해내면 된다.



(참고) 자리수 dp에 대해 연습하고 싶으시다면 BOJ 3026 V 문제를 푸는 것을 추천합니다. 이거 풀면 웬만한 거 다 풀지 않을까싶네요


'Solved problems' 카테고리의 다른 글

BOJ 1023 괄호 문자열  (1) 2020.06.04
BOJ 17428 K번째 괄호 문자열  (0) 2020.06.04
BOJ 16876 재미있는 숫자 게임  (0) 2020.05.28
BOJ 2543 초고속철도  (0) 2020.05.28
BOJ 2888 상범 게임  (0) 2020.05.28
Comments