본문 바로가기
알고리즘 백준문제풀기

백준 python 11057번 오르막수 / 11052번 카드 구매하기 / 9465번 스티커

by deeplearningkakao 2022. 1. 19.
반응형

백준 11057 문제

python으로 풀어봅니다.

 

Python
import sys
 
r = int(sys.stdin.readline()) # 중복 조합을 통해 문제를 수행한다. 

n = 10 + r - 1

 
a = n    # n+r-1
b = r    # r
 

# aCb 
for i in range(1, r):
    a *= n - i # n x (n - i) .. x (n - r + 1)
    b *= r - i # r!
 
print((a // b) % 10007) # a // b

 

백준 11052 카드 구매하기

 

입력

첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000)

둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)

 

출력

첫째 줄에 민규가 카드 N개를 갖기 위해 지불해야 하는 금액의 최댓값을 출력한다.

반응형

 

Python
 
import sys
 
 
n = int(sys.stdin.readline())
p = [0] + list(map(int, sys.stdin.readline().split()))
dp = [0] * (n + 1)
 
# 반복문을 통해 각 카드 개수의 지불하는 최대 금액을 구한다.
for i in range(1, n + 1):
    for j in range(1, i + 1):
 
        # 현재 카드를 지불하는 최대 금액과 이전의 카드를 지불한(i - j) 최대 금액 + j개가 들어있는 카드팩 가격을 비교
        dp[i] = max(dp[i], dp[i - j] + p[j])
 
print(dp[n])

 

백준 9465번 스티커

 

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 점수이다. 연속하는 두 정수 사이에는 빈 칸이 하나 있다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다. 

 

출력

각 테스트 케이스 마다, 2n개의 스티커 중에서 두 변을 공유하지 않는 스티커 점수의 최댓값을 출력한다.

 

 

 

 

Python
 
import sys
 
t = int(sys.stdin.readline())
 

for _ in range(t):
    n = int(sys.stdin.readline())
    m1 = list(map(int, sys.stdin.readline().split())) # 첫 번째 줄 점수
    m2 = list(map(int, sys.stdin.readline().split())) # 두 번째 
 
    for i in range(1, n):
        
        if i == 1:
            m1[1] += m2[0]
            m2[1] += m1[0]
 
        else:
            m1[i] = max(m2[i - 1], m2[i - 2]) + m1[i]
            m2[i] = max(m1[i - 1], m1[i - 2]) + m2[i]
 
    print(max(m1[n - 1], m2[n - 1]))

 

 

 

반응형

댓글