1. 10844번: 쉬운 계단수
-문제: https://www.acmicpc.net/problem/10844
10844번: 쉬운 계단 수
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
www.acmicpc.net
: 숫자가 한개일 때 쉬운 계단수를 못 구한하지 않나?라는 생각에 쉬운 계단수라는 개념이 처음에 이해가지 않았음.
숫자가 한개일 때는 그냥 하나로 세고, 숫자길이 2일 때부터 생각하면됨. 이후 3부터는 숫자 길이 1,2일 때의 반복임을 이용하면된다.
-정답 풀이:
n=int(input())
dp=[[0 for i in range(10)] for j in range(101)]
#숫자가 무엇이든간에 자릿수가 1이면 계단수 1개임을 의미함
for i in range(1,10):
dp[1][i]=1
for i in range(2,n+1):
for j in range(10):
#i위치에 0이 오면 전행의 1의 개수와 동일하다(1의 -1이 0)
if j==0:
dp[i][j]=dp[i-1][1]
#i위치에 9가오면 이전위치에 8밖에 못옴. 전행의 8의 개수와 동일
elif j==9:
dp[i][j]=dp[i-1][8]
else:
dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1]
print(sum(dp[n])% 1000000000)
-그리고 오타 조심하기!!! print를 priint라고 서서 NameError 엄청냄,,
2. 2193번: 이친수
**처음으로 풀이 안보고 맞힌 문제(피보나치 유형), 겉모습은 다르지만 점화식을 구해보면 피보나치 구조를 가지므로, 구현해서 답을 구함.
복잡해보이지만 알고보면 단순한 문제
-문제: https://www.acmicpc.net/problem/2193
2193번: 이친수
0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않
www.acmicpc.net
-정답풀이:
- for문의 끝 인덱스가 n+1인 이유: 길이가 n인 이진수를 구하므로 n번째 인덱스 값을 출력해야하기 때문이다
-틀린풀이: 초기값이랑, 인덱스 조심(이거 꼭 제대로 하고 넘어가기)
3. 11727번: 2xn 타일링2(ssafy공부할 때 있었던 문제)
-문제:https://www.acmicpc.net/problem/11727
11727번: 2×n 타일링 2
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다.
www.acmicpc.net
: 인덱스를 잘못구해서 오류가 많았음. 점화식은 옳게 구함-> 인덱스 똑바로 정하는 연습하기. 해당문제 다시 풀어봐야함
-점화식: s(i)=2*s(i-2)+s(i-1)
점화식은 각 항의 값을 직접 구해서 규칙성을 찾으려했음
-정답 풀이:
- 마지막에 10007로 나누는 거 잊지말기
- dp 초기값 설정하는데 오류발생(dp=[0 for i in range(n)]이라고 설정해서 되도록이면 끝값으로 크게 설정하기)
- 이것도 n번째 인덱스 값을 출력해야함
'백준 > DP' 카테고리의 다른 글
[코딩테스트] #9. 백준 9461번,14051번, 9465번 (0) | 2021.12.18 |
---|---|
[코딩테스트]#8. 백준 1010번,11052번,1904번 (0) | 2021.12.17 |
[코딩테스트]#6. 백준/다이나믹프로그래밍/ 1912번,2156번, 2748번 (0) | 2021.12.13 |
[코딩테스트]#5. 2579번, 11053번, 1932번 (0) | 2021.12.13 |
[코딩테스트] #4. 백준 9095번, 10870번, 11726번,1149번 (0) | 2021.12.11 |