티스토리 뷰

PS

백준 1562. 계단 수

tose33 2023. 8. 18. 14:19

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

 

1562번: 계단 수

첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

 

이 문제는 아래 쉬운 계단 수와 dp 점화식은 같다.

 

https://tose33.tistory.com/89

 

백준 10844. 쉬운 계단 수

다시 푼 문제 www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 예전 글: tose33.tistory.com/14 이차원 다이나믹으로. d[n][a] : 길이가 n

tose33.tistory.com

 

하지만 이 문제는 bit 연산을 써야지만 풀린다.

 

이전 쉬운 계단 수 에서 점화식은 d[i][j] 배열을 만들고 i 는 숫자의 길이, j 는 마지막 숫자라고 했을때

d[i][j] = d[i-1][j-1] + d[i-1][j+1] 이었다. (물론 끝자리가 0,9 일때는 제외하고)

예를들어 123 이면 다음에는 1234 or 1232 이런 식으로 추가 해주기만 하면 되기 때문이다.

 

그런데 이 문제는 0~9 가 무조건 포함 되야한다.

따라서 사용한 숫자들이 뭔지 알아야 한다는 뜻이다. 

 

d[i][j][bit] i 는 길이, j 는 마지막 숫자, bit 는 사용한 숫자

예를들어 bit=101 이면 2,0 숫자를 사용했다는 의미다.

bit 의 최대 크기는 숫자가 0~9 로 총 10 개 이므로 1<<10 (10000000000) 일 것이다.

 

이제 점화식은 기본적으로 쉬운 계단 수랑 비슷한데, 이전 크기의 숫자와 현재 크기의 숫자의 비트를 or 연산 해줘야 한다.

or 연산 해주는 이유는 예를들어 이전 크기 숫자의 bit 가 101 이라고 해보자.

101 은 2,0 숫자를 사용했다는 뜻이다.

 

그리고 현재 크기 숫자에서 뒤에 1을 추가 한다고 해보자.

연산은 (1<<1) = 10 이 된다.

101 | 010 = 111 

111 은 2,1,0 을 사용했다는 뜻이 된다.

 

이렇게 or 연산으로 쉽게 기존에 사용했던 숫자들에 이번에 사용한 숫자를 추가로 표시할수 있다.

 

최종적으로 답은 N 크기 숫자의 0~9 로 끝나는 경우 중, bit 가 1111111111 즉 모든 숫자를 사용한 경우를 모두 더해주면 된다.

 

 

 

 

'PS' 카테고리의 다른 글

백준 2342. Dance Dance Revolution  (0) 2023.08.26
백준 17404. RGB거리 2  (0) 2023.08.25
백준 13302. 리조트  (0) 2023.08.16
백준 14720. 우유 축제  (0) 2023.08.16
백준 9252. LCS 2  (0) 2023.08.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함