반응형
1, 2, 3 더하기 다국어
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
1 초 (추가 시간 없음) | 512 MB | 99104 | 65131 | 44492 | 64.106% |
문제
정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
- 1+1+1+1
- 1+1+2
- 1+2+1
- 2+1+1
- 2+2
- 1+3
- 3+1
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
출력
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
예제 입력 1
3
4
7
10
예제 출력 1
7
44
274
풀이
1)
import sys
input = sys.stdin.readline
def onetwothree(n):
dp = [0] * 11
dp[0] = 0
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]
t = int(input())
for _ in range(t):
n = int(input())
print(onetwothree(n))
- 풀이과정
sys.stdin.readline
을 사용하여 입력을 받습니다. 이를 통해 테스트 케이스의 수(t)와 각 테스트 케이스에 대한 정수(n)를 입력받습니다.
onetwothree(n)
함수를 정의합니다. 이 함수는 다음과 같은 점화식을 사용하여 동적 계획법(Dynamic Programming)으로 문제를 해결합니다.- dp[0] = 0
- dp[1] = 1
- dp[2] = 2
- dp[3] = 4
- dp[i] = dp[i-1] + dp[i-2] + dp[i-3] (i >= 4)
- 주어진 테스트 케이스의 수(t)만큼 반복문을 돌면서 각 정수(n)에 대해
onetwothree(n)
함수를 호출하여 결과를 출력합니다.
2)
d = [0]*11
d[0] = 1
for i in range(1, 11):
if i-1 >= 0:
d[i] += d[i-1]
if i-2 >= 0:
d[i] += d[i-2]
if i-3 >= 0:
d[i] += d[i-3]
t = int(input())
for _ in range(t):
n = int(input())
print(d[n])
- 풀이과정
- 크기가 11인 리스트
d
를 선언하고, 모든 요소를 0으로 초기화합니다.
d[0]
을 1로 설정합니다.
- 1부터 10까지의 범위에 대해 for 반복문을 실행합니다. 이때, 각 i에 대해 다음 연산을 수행합니다.
- i-1이 0 이상이면,
d[i]
에d[i-1]
을 더합니다.
- i-2가 0 이상이면,
d[i]
에d[i-2]
를 더합니다.
- i-3이 0 이상이면,
d[i]
에d[i-3]
을 더합니다.
- i-1이 0 이상이면,
t
를 입력받아 테스트 케이스의 수를 저장합니다.
- 테스트 케이스의 수(t)만큼 for 반복문을 실행하며 다음 동작을 수행합니다.
- 정수
n
을 입력받습니다.
d[n]
의 값을 출력합니다.
- 정수
이 코드는 이전 코드와 유사한 동작을 수행하지만, 미리 계산된 결과를 리스트
d
에 저장하여 빠르게 결과를 출력할 수 있습니다. 이렇게 미리 계산하는 방식은 메모이제이션(Memoization)이라고 합니다. 이전 코드와 달리, 이 코드는 미리 1부터 10까지의 결과를 계산하므로, 테스트 케이스에서 주어진n
에 대한 결과를 빠르게 출력할 수 있습니다. - 크기가 11인 리스트
Uploaded by N2T
반응형
'Algorithm' 카테고리의 다른 글
[백준 16194 파이썬/python] 카드 구매하기 2 (0) | 2023.04.17 |
---|---|
[백준 11052 파이썬/python] 카드 구매하기 (0) | 2023.04.15 |
[백준 11727 파이썬/python] 2 x n 타일링 2 (0) | 2023.04.14 |
[백준 11726 파이썬/python] 2 x n 타일링 (0) | 2023.04.14 |
[백준 1463 파이썬/python] 1로 만들기 (0) | 2023.04.12 |