728x90
반응형
https://www.acmicpc.net/problem/9095
9095번: 1, 2, 3 더하기
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
www.acmicpc.net
최종 코드
GitHub - hwayeon351/BEAKJOON-Algorithms: 백준 알고리즘 소스 코드 모음
백준 알고리즘 소스 코드 모음. Contribute to hwayeon351/BEAKJOON-Algorithms development by creating an account on GitHub.
github.com
def solution(n):
if n <= 2: return n
elif n == 3: return 4
dp = [0]*(n+1)
dp[1] = 1
dp[2] = 2
dp[3] = 4
for i in range(4, n+1):
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
return dp[n]
n = int(input())
answer = [0]*n
for i in range(n):
answer[i] = solution(int(input()))
for i in range(n):
print(answer[i])
풀이 과정
풀이 시간 16분
1, 2, 3을 합하여 n을 만드는 경우의 수를 구하는 문제이다.
DP 알고리즘을 적용하기 위해 n이 1~6인 경우까지 경우의 수를 구해나가며 규칙을 찾았다.
n을 만드는 경우의 수는 결국 이전 3개의 값을 만드는 경우의 수를 합하는 것이었다.
dp[n] = dp[i-1] + dp[i-2] + dp[i-3]
dp 리스트를 만들어 메모이제이션을 통해 이전 값을 활용하여 문제를 풀었다.
def solution(n):
if n <= 2: return n
elif n == 3: return 4
dp = [0]*(n+1)
dp[1] = 1
dp[2] = 2
dp[3] = 4
for i in range(4, n+1):
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
return dp[n]
n = int(input())
answer = [0]*n
for i in range(n):
answer[i] = solution(int(input()))
for i in range(n):
print(answer[i])
#시간복잡도 = O(n) 공간복잡도 = O(n)
728x90
반응형
'코테 노트 > 백준' 카테고리의 다른 글
백준 16234 인구 이동 C++ (0) | 2021.08.05 |
---|---|
백준 1890 점프 Python3 (0) | 2021.08.05 |
백준 15686 치킨 배달 C++ (0) | 2021.08.04 |
백준 1463 1로 만들기 Python3 (0) | 2021.08.04 |
백준 15683 감시 C++ (0) | 2021.08.03 |