/images/jg_02.jpg

SW Expert Academy_D3 3307, 3304, 4371, 10726

D3_3307_최장 증가 부분 수열(LIS)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
for T in range(int(input())):
    N = int(input())
    arr = list(map(int, input().split()))
    dp= [1] * N
    
    for i in range(1, N):
        for j in range(i):
            if arr[j] < arr[i]:
                dp[i]= max(dp[i], dp[j] + 1)

    print(f'#{T+1} {max(dp)}')

# dp는 쉬운듯 어렵고 어려운듯 쉽다...
# LIS로 검색하면 도움이 되는 글이 많다. 

SW Expert Academy_D3 3131, 3233, 1860, 4047

D3_3131_100만 이하의 모든 소수

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
a = [0, 0] + [1] * 1000000

for i in range(2, 1000000):
    if a[i] == 1:
        for j in range(2*i, 1000001, i):
            a[j] = 0

for i in range(2, 1000000):
    if a[i] == 1:
        print(i, end=" ")
    
# 에라토스테네스의 체

D3_3233_정삼각형 분할 놀이

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
for T in range(int(input())):
    A, B = map(int, input().split())

    result = 0
    for i in range(int(A//B)):
        result += 2*(i+1) - 1

    print(f'#{T+1} {result}')
    
# A를 B의 길이로 나눈 정삼각형은 맨 위층 부터 2n-1개의 삼각형이 나온다. 

block_chain private Vs public / blockchain Vs network

🧔프라이빗 블록체인 VS 👨🏻‍🤝‍👨🏻퍼블릭 블록체인 VS

🔒프라이빗 네트워크 VS 🔐퍼블릭 네트워크

Why 이런 질문을?

블록체인 관련 정보를 구글링하다보면, 프라이빗 네트워크, 퍼블릭 네트워크, 프라이빗 블록체인, 퍼블릭 블록체인. 이 4가지의 말을 혼용해서 사용하고 있는 것을 쉽게 볼 수 있다. 여기서

SW Expert Academy_D3 4698, 1493, 10570, 3032

D3_4698_테네스의 특별한 소수

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
for T in range(int(input())):
    D, A, B = map(int, input().split())
    D = str(D)
    arr = [0, 0] + [1] * (B - 1)
    # 에라토스테네스의 체를 활용할껀데 어떤 수까지 검증하면 될까?
    # 검증해보니 모든 수는 자신의 int(root)까지만 확인하면 배수값인지 확인이 가능했다.
    rootB = int(B**0.5)							#👈 이 아이디어를 얻기까지 오랜시간이 걸렸다.

    for i in range(2, rootB+1):					#👈
        if arr[i] == 1:							#👈
            for j in range(2*i, B+1, i):		#👈 에라토스테네스의 체 를 활용
                arr[j] = 0						#👈

    result = []
    for i in range(A, B+1):
        if arr[i] == 1 and D in str(i):
            result.append(i)

    print(f'#{T+1} {len(result)}')

SW Expert Academy_D3 2817, 1491, 1229, 5515

D3_2817_부분 수열의 합

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import itertools

for T in range(int(input())):
    N, K = map(int, input().split())   # N: 갯수,   K: 목표 합
    Nums = list(map(int, input().split()))

    count = 0
    for i in range(1, N+1):
        boxs = itertools.combinations(Nums, i)
        for box in boxs:
            if sum(box) == K:
                count += 1

    print(count)

# 하... 라이브러리 쓰자..

D3_1491_원재의 벽 꾸미기

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
for T in range(int(input())):
    N, A, B = map(int, input().split())
    result = []
    for R in range(1, N+1):
        for C in range(1, R+1):
            if R * C > N:
                break
            elif R * C <= N:
                result.append(A * abs(R-C) + B * (N - R*C))
    print(f"#{T+1} {min(result)}")

# A X lR – Cl + B X (N - R X C)에서
# A X lR – Cl => 양수,   B X (N - R X C) => 양수 만 가능하다.
# 또 직사각형 인테리어라고해서 R != C 라고 생각했으나,,
# R = C인 경우도 넣어줘야 답이 나왔다.