python, pyTorch/코딩테스트-파이썬

BOJ ATM, 2xn타일링(1,2), FourSquares

zooyeonii 2022. 3. 7. 15:58

1. BOJ 11399 ATM

실버 3  https://www.acmicpc.net/problem/11399

코드

1
2
3
4
5
6
7
8
import sys
input = sys.stdin.readline
= int(input())
arr = list(map(int, input().split()))
arr.sort()
for i in range(1, N):
    arr[i] += arr[i-1]
print(sum(arr))
cs

설명

오름차순으로 정렬 후 누적합의 합을 구해서 풀 수 있었다. 

2. BOJ 11726 2xn타일링

실버 3, DP  https://www.acmicpc.net/problem/11726

코드

1
2
3
4
5
6
7
= int(input())
dp = [0 for _ in range(1001)]
dp[1= 1
dp[2= 2
for i in range(3len(dp)):
    dp[i] = dp[i-1]+dp[i-2]
print(dp[N]%10007)
cs

설명

dp[i] = dp[i-1] + dp[i-2] 
i번째 타일의 경우의 수는 dp[i-1]에서 1x2 하나 추가하는 것과 dp[i-2]에서 (2x1)2세트 하나를 추가하는 것과 같다. 

3. BOJ 11727 2xn타일링2

실버 3, DP  https://www.acmicpc.net/problem/11727

코드

1
2
3
4
5
6
7
= int(input())
dp = [0 for _ in range(1001)]
dp[1]=1
dp[2]=3
for i in range(31001):
    dp[i] = dp[i-1]+2*dp[i-2]
print(dp[N]%10007)
cs

설명

dp[i] = dp[i-1] + 2*dp[i-2] 
i번째 타일의 경우의 수는 dp[i-1]에서 1x2 하나 추가하는 것과 dp[i-2]에서 2x2 또는 (2x1)2개를 추가하는 것의 합이다. 
따라서 dp[i-2]는 2배가 된다. 

4. BOJ 

실버 4, DP  https://www.acmicpc.net/problem/17626

코드

1
2
3
4
5
6
7
8
9
10
11
= int(input())
dp = [01]
for i in range(2, N+1):
    ans = 5e5
    for j in range(1, i+1):
        if (j**2)>i:
            break
        else:
            ans = min(ans, dp[i-(j**2)])
    dp.append(ans+1)
print(dp[N])
cs

설명

dp[i]는 숫자 i가 몇개의 제곱수로 더해지는 지를 저장한다. j^2를 키워가면서 dp[i- j^2]중 최솟값을 찾고 해당 값에 1을 더해서 반환한다. 

 

 

'python, pyTorch > 코딩테스트-파이썬' 카테고리의 다른 글

BOJ 쉬운계단수  (0) 2022.03.04
BOJ 1로만들기2, 포도주시식  (0) 2022.03.04
BOJ 1806 부분합  (0) 2022.03.01
BOJ 2644 촌수계산  (0) 2022.02.25
파이썬 round, sys.stdin.readline()  (2) 2022.02.16