๐Ÿฏ ์•Œ๊ณ ๋ฆฌ์ฆ˜/BOJ

๋ฐฑ์ค€ 3์ฃผ์ฐจ

๊ณ„๋ž€์†Œ๋…„ 2025. 1. 19. 18:23

13์ผ์ฐจ(1/20)

 

https://www.acmicpc.net/problem/16953

from collections import deque


def bfs(a, b):
    # ํ์— (ํ˜„์žฌ ๊ฐ’, ์—ฐ์‚ฐ ํšŸ์ˆ˜)๋กœ ์‹œ์ž‘ ์ƒํƒœ๋ฅผ ๋„ฃ์Œ
    queue = deque([(a, 1)])  # ์‹œ์ž‘ ๊ฐ’ a์—์„œ ์—ฐ์‚ฐ 1๋ฒˆ๋ถ€ํ„ฐ ์‹œ์ž‘
    visited = set([a])  # ๋ฐฉ๋ฌธํ•œ ๊ฐ’๋“ค์„ ๊ธฐ๋กํ•˜์—ฌ ์ค‘๋ณต ๋ฐฉ์ง€

    while queue:
        current, count = queue.popleft()

        # 2๋ฅผ ๊ณฑํ•œ ๊ฐ’์ด B์™€ ๊ฐ™์œผ๋ฉด ๋ฐ”๋กœ ๋ฐ˜ํ™˜
        if current == b:
            return count

        # ๋‘ ๊ฐ€์ง€ ์—ฐ์‚ฐ์„ ์‹œ๋„
        # 1. 2๋ฅผ ๊ณฑํ•œ๋‹ค.
        next_value = current * 2
        if next_value <= b and next_value not in visited:
            visited.add(next_value)
            queue.append((next_value, count + 1))

        # 2. 1์„ ์ˆ˜์˜ ์˜ค๋ฅธ์ชฝ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
        next_value = current * 10 + 1
        if next_value <= b and next_value not in visited:
            visited.add(next_value)
            queue.append((next_value, count + 1))

    return -1  # ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ


a, b = map(int, input().split())

result = bfs(a, b)
print(result)

 

14์ผ์ฐจ(1/21)

 

DP๋Š” ์ •์‹ ๋งŒ ์ฐจ๋ฆฌ๋ฉด ๋œ๋‹ค.

https://www.acmicpc.net/problem/9465

 

t=int(input())
for _ in range(t):

    n=int(input())
    arr=[]

    for _ in range(2):
        arr.append(list(map(int,input().split())))
    dp=[[0]* n for _ in range(2)]

    for i in range(n):
        for j in range(2):
            if i == 0:
                dp[j][i] = arr[j][i]
            elif i == 1:
                dp[j][i] = arr[j][i] + dp[1 - j][i - 1]
            else:
                if j==0:
                    dp[j][i]=arr[j][i]+max(dp[j+1][i-1],dp[j+1][i-2],dp[j][i-2])
                else:
                    dp[j][i]=arr[j][i]+max(dp[j-1][i-1],dp[j-1][i-2],dp[j-1][i-2])
    print(max(max(dp[0]),max(dp[1])))

 

https://www.acmicpc.net/problem/9461

t=int(input())
for _ in range(t):
    n=int(input())
    dp=[0]*(n+1)

    for i in range(n):
        if i==0 or i==1 or i==2:
            dp[i]=1
        else:
            dp[i] = dp[i-2]+dp[i-3]
    print(dp[-2])

 

https://www.acmicpc.net/problem/1890

n=int(input())
arr=[]
dp=[]
for _ in range(n):
    arr.append(list(map(int, input().split())))
dp=[[0]* n for _ in range(n)]
dp[0][0] = 1  

for i in range(n):
    for j in range(n):
        k=arr[i][j]
        if k==0:
            continue
        if i+k<n:
            dp[i + k][j] += dp[i][j]
        if j+k<n:
            dp[i][j+k] += dp[i][j]
print(dp[-1][-1])

 

15์ผ์ฐจ(1/22)

 

https://www.acmicpc.net/problem/1965

 

์ „ํ˜•์ ์ธ LIS๋ฌธ์ œ

์ด๋•Œ, max(dp) != dp[-1] ์ž„์„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

'''
8
1 6 2 5 7 3 5 6
dp=[1,1,1,1,1,1,1,1]
arr=[1,6,2,5,7,3,5,6]

i=1์ผ๋•Œ, j=0
dp=[1,2,1,1,1,1,1,1]

i=2์ผ๋•Œ, j=0,1
dp=[1,2,2,1,1,1,1,1]
dp=[1,2,2,1,1,1,1,1]

'''
n=int(input())
dp=[1]*n
arr =list(map(int,input().split()))
for i in range(1,n): #์ž๊ธฐ์ž์‹ 
    for j in range(i):
        if arr[j]<arr[i]: #๋’ท ์ˆซ์ž๊ฐ€ ๋” ํฌ๋ฉด
            if dp[i]<dp[j]+1:
                dp[i]=dp[j]+1
print(max(dp))

 

https://www.acmicpc.net/problem/1309

ํ™•์‹คํžˆ ์‹ค๋ฒ„ dp๋ฌธ์ œ๋Š” ๋ฌธ์ œ๊ฐ€ ์ฐธ dp ์Šค๋Ÿฌ์šด ๊ฒƒ ๊ฐ™๋‹ค.

'''
n=0์ผ๋•Œ 1๊ฐ€์ง€ = 1
n=1์ผ๋•Œ 1+2๊ฐ€์ง€ =3
N=2์ผ๋•Œ 1+4+2๊ฐ€์ง€ = 7
n=3์ผ๋•Œ 1+6+8+2๊ฐ€์ง€ = 17
n=4์ผ๋•Œ 1+8+18+12+2๊ฐ€์ง€ = 41
1*2+1
3*2+1
7*2+3
17*2+7
41*2+17
์ฆ‰, ์ ํ™”์‹์ด dp[n]=dp[n-1]*2+dp[n-2]๊ฐ€ ๋‚˜์˜จ๋‹ค.
'''

n=int(input())
dp=[0]*(n+1)
for i in range(n+1):
    if i==0:
        dp[i]=1
    elif i==1:
        dp[i]=3
    else:
        dp[i]=2*dp[i-1]+dp[i-2]
print(dp[n]%9901)

100,000์ด๊ธฐ์— ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ

๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ๊ฐ ๋ฐฐ์—ด๋งˆ๋‹ค ํ•ด์ค˜์•ผ, ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋ฅผ ๋ฐฉ์ง€ ํ•  ์ˆ˜ ์žˆ๋‹ค.

n=int(input())
dp=[0]*(n+1)
for i in range(n+1):
    if i==0:
        dp[i]=1
    elif i==1:
        dp[i]=3
    else:
        dp[i]=(2*dp[i-1]+dp[i-2])%9901
print(dp[n])

๋‚˜๋Š” ์ˆซ์ž๋ณด๊ณ  ์œ ์ถ”์—์„œ ํ’€์—ˆ๋Š”๋ฐ, ์ž์„ธํ•œ ์ ํ™”์‹์€ ์•„๋ž˜ ๋ธ”๋กœ๊ทธ์— ์ž˜ ๋‚˜์™€์žˆ๋‹ค.

https://great-park.tistory.com/131 

 

16์ผ์ฐจ(1/23)

 

https://www.acmicpc.net/problem/1813

๊ตญ์–ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์›Œ์š”...

n=int(input())
arr=list(map(int,input().split()))

trues = [0]*51

#ํ•ด๋‹น ๋ง์ด ๋‚˜์˜จ ํšŸ์ˆ˜ ์…ˆ
for i in arr:
    trues[i]+=1

#'ํšŸ์ˆ˜'์™€ '์ˆซ์ž'๊ฐ€ ๊ฐ™๋‹ค๋ฉด, ๋งž๋Š”๋ง
# ๊ฐ€์žฅ ํฐ๊ฐ’์ด๋ฏ€๋กœ ๋ฐ˜๋Œ€์—์„œ ๋Œ๋ฉด์„œ ์ œ์ผ ๋จผ์ € ์˜ค๋Š” 0์ด ์•„๋‹Œ๊ฐ’์ด ๋ ๊ฒƒ
for i in range(50,-1,-1):
    if trues[i]==i:
        print(i)
        break
else:
    print(-1)

 

https://www.acmicpc.net/problem/2096

๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ

n= int(input())
arr=[]
for _ in range(n):
    arr.append(list(map(int,input().split())))

max_dp = [[0] * 3 for _ in range(n)]

# ์ฒซ ํ–‰
max_dp[0][0] = arr[0][0]
max_dp[0][1] = arr[0][1]
max_dp[0][2] = arr[0][2]

# ๋‘ ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ๊ณ„์‚ฐ
for i in range(1, n):
    max_dp[i][0] = arr[i][0] + max(max_dp[i-1][0], max_dp[i-1][1])
    max_dp[i][1] = arr[i][1] + max(max_dp[i-1][0], max_dp[i-1][1], max_dp[i-1][2])
    max_dp[i][2] = arr[i][2] + max(max_dp[i-1][1], max_dp[i-1][2])

min_dp = [[0] * 3 for _ in range(n)]

# ์ฒซ ํ–‰
min_dp[0][0] = arr[0][0]
min_dp[0][1] = arr[0][1]
min_dp[0][2] = arr[0][2]

# ๋‘ ๋ฒˆ์งธ ํ–‰๋ถ€ํ„ฐ ๊ณ„์‚ฐ
for i in range(1, n):
    min_dp[i][0] = arr[i][0] + min(min_dp[i-1][0], min_dp[i-1][1])
    min_dp[i][1] = arr[i][1] + min(min_dp[i-1][0], min_dp[i-1][1], min_dp[i-1][2])
    min_dp[i][2] = arr[i][2] + min(min_dp[i-1][1], min_dp[i-1][2])
print(max(max_dp[n-1]), min(min_dp[n-1]))

 

1/17