๐Ÿ‘ฉโ€๐ŸŽ“๊ณต๋ถ€ - 2024.02.05 ์†Œ๋งˆ๋Œ€๋น„ ๋ฌธ์ œํ’€์ด

์œ ๋ น๊ฐœยท2024๋…„ 2์›” 5์ผ
0

PS-์•Œ๊ณ ๋ฆฌ์ฆ˜2

๋ชฉ๋ก ๋ณด๊ธฐ
26/34
post-thumbnail

11055๋ฒˆ - ๊ฐ€์žฅ ํฐ ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด

๊ฐ€์žฅ ํฐ ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
์ด์ „์— ํ’€์—ˆ๋˜ ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด์„ ์‘์šฉํ•œ ๋ฌธ์ œ๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import copy

n = int(input())
lst = list(map(int,input().split()))
dp = copy.deepcopy(lst)

๋จผ์ € dp๋ฅผ list์™€ ๋˜‘๊ฐ™์ด ์ดˆ๊ธฐํ™”ํ•ด์ค๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ˜„์žฌ ๋ฌธ์ œ์—์„œ ์ œ์ผ ์ž‘๊ฒŒ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์€ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ํ•ฉ์‚ฐ์ด๋ฏ€๋กœ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ž๊ธฐ ์ž์‹ ์ž…๋‹ˆ๋‹ค.

for i in range(len(lst)):
    for j in range(i):
        if lst[i] > lst[j]:
            dp[i] = max(dp[i],lst[i]+dp[j])

๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ์กฐ์‚ฌ์ค‘์ธ ์ธ๋ฑ์Šค๊ฐ€ ์ด์ „ ์ธ๋ฑ์Šค๋ณด๋‹ค ๋” ํฌ๋‹ค๋ฉด ํ˜„์žฌ dp๊ฐ’๊ณผ ๊ทธ ์ด์ „ ์ธ๋ฑ์Šค์˜ dp๊ฐ’ + ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ํ•ฉ์‚ฐ์„ ๋Œ€์กฐํ•˜์—ฌ ๋” ํฐ๊ฐ’์„ ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ dp๊ฐ’์— ๋Œ€์ž…ํ•ด์ค๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ฌธ์ œ ํ…Œ์ผ€๋Œ€๋กœ๋ผ๋ฉด ์ด๋Ÿฐ์”ฉ์œผ๋กœ ๋‚˜์˜ต๋‹ˆ๋‹ค.

print(max(dp))

๋งˆ์ง€๋ง‰์œผ๋กœ dp ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.




1965๋ฒˆ - ์ƒ์ž๋„ฃ๊ธฐ

๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด์„ ๋ฌธ์ œํ™”ํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

n = int(input())
lst = list(map(int,input().split()))
dp = [1]*len(lst)

1์ด ์ˆ˜์—ด์˜ ์ตœ์†Ÿ๊ฐ’์ด๋ฏ€๋กœ ๋ฐ›์•„์ฃผ๊ณ (์—ฌ๊ธฐ์„  ๋ฐ•์Šค)

for i in range(len(lst)):
    for j in range(i):
        if lst[i] > lst[j]:
            dp[i] = max(dp[i],dp[j]+1)

ํ˜„์žฌ๊ฐ’์ด ์ด์ „ ๊ฐ’๋ณด๋‹ค ํฌ๋‹ค๋ฉด ํ˜„์žฌ๊ฐ’์˜ dp์™€ ์ด์ „๊ฐ’์˜ dp + 1๊ฐ’์„ ๋น„๊ตํ•ด ๋” ํฐ ๊ฐ’์„ ํ˜„์žฌ๊ฐ’์˜ dp๋กœ ๋„ฃ์–ด ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด์„ ๊ตฌ์ฒดํ™”ํ•ด์ค์‹œ๋‹ค.

print(max(dp))

max(dp)์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.




15988๋ฒˆ - 1,2,3 ๋”ํ•˜๊ธฐ 3

์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ํ”ผํ•˜๊ธฐ ์ •๋ง์ •๋ง ์–ด๋ ค์šด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.


๋ถ„์„

์ผ๋‹จ ์ถ”๊ฐ€ ์‹œ๊ฐ„ ์—†์Œ์„ ๋ณด์ž๋งˆ์ž ๋‹จ์ˆœ ์žฌ๊ท€๋‚˜ ๋ฐฑํŠธ๋ž˜ํ‚น์œผ๋กœ๋Š” ์ ˆ๋Œ€ ์‹œ๊ฐ„ ์•ˆ์— ๋ชป๋งž์ถ˜๋‹ค๊ณ  ๋ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์กฐ๊ฑด์ค‘์— ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ 1,000,000,009๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋ผ๋Š” ๋ง์ด ์žˆ์œผ๋ฉด DP๋ผ๊ณ  ๋ณด๋Š”๊ฒŒ ํƒ€๋‹นํ•˜๊ฒ ์ฃ ...

์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ dp[n] = dp[n-1]+dp[n-2]+dp[n-3]์ด๋ผ๋Š” ์ ํ™”์‹ ๋„์ถœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


์ฒซ ๋ฒˆ์งธ ์‹œ๋„

T = int(input())
ans = []
for _ in range(T):
    ans.append(int(input()))

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋ฐ›์•„ ans์— ์ถ”๊ฐ€ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

memo = [0]*(max(ans)+1)
memo[0] = 1
memo[1] = 2
memo[2] = 4

memo[2]๊นŒ์ง€๋Š” ์ ํ™”์‹์—์„œ ์Œ์ˆ˜์ทจ๊ธ‰ ๋  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ 2๊นŒ์ง€ ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•ด์ค์‹œ๋‹ค. ์‹œ๊ฐ„์„ ์•„๋ผ๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ค‘ ์ œ์ผ ํฐ ๊ฐ’๋งŒ ๋Œ๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฉ”๋ชจ ์ฐธ๊ณ ํ•˜์—ฌ ๋‹ต์„ ์ถœ๋ ฅํ•˜๋ ค ํ–ˆ์Šต๋‹ˆ๋‹ค.

recursion(max(ans))

์ด์ œ ์žฌ๊ท€๋ฅผ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.

import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

์‹œ๊ฐ„ ์ ˆ์•ฝ์„ ์œ„ํ•ด sysinput๊ณผ ์žฌ๊ท€ depth ์ƒํ•œ์„ ํ•ด์ œํ•ด์ฃผ๊ณ 

def recursion(n):
    if memo[n]:
        return memo[n]
    memo[n] = ( recursion(n-1) + recursion(n-2) + recursion(n-3) )%1000000009
    return memo[n]

๋ฉ”๋ชจ์ด์ œ์ด์…˜์— ์žˆ์œผ๋ฉด memo[n]์„ return, ์•„๋‹ˆ๋ผ๋ฉด ์ ํ™”์‹์—์„œ ์ € ์‹์„ ๋‚˜๋ˆˆ ๊ฐ’์„ return ํ•ด์ค์‹œ๋‹ค.
1000000009๋ฅผ ์ง€๊ธˆ ๋‚˜๋ˆ ์ฃผ๋Š” ์ด์œ ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์œผ๋กœ ์ธํ•ด ์†”๋ธŒ๊ฐ€ ์•ˆ๋˜๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.
(๋ถ„๋ฐฐ๋ฒ•์น™ / ๋ชจ๋“ˆ๋Ÿฌ ์„ฑ์งˆ์— ์˜๊ฑฐํ•ด ์ €๊ธฐ์„œ ๋‚˜๋ˆ„๋“  ๋‹ต ์ง์ „์— ๋‚˜๋ˆ„๋“  ๊ฐ’ ์ถœ๋ ฅ์— ์ฐจ์ด๋Š” ์—†์Šต๋‹ˆ๋‹ค.)

for values in ans:
    print(memo[values-1])

์ถœ๋ ฅ์‹œ์ผœ์ฃผ๋ฉด

๋‹ต์€ ์ œ๋Œ€๋กœ ๋‚˜์˜ค๋Š”๋ฐ

์—ญ์‹œ๋‚˜...


๋‘ ๋ฒˆ์งธ ์‹œ๋„

์žฌ๊ท€๋Š” ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€๋งŒ callstack์„ ๋ถˆ๋Ÿฌ์˜ค๋ฏ€๋กœ for๋ฌธ์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ for๋ฌธ์œผ๋กœ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

sysinput๋ฐ setrecursionlimit ์„ ์–ธํ•ด์ฃผ๊ณ 

T = int(input())
ans = []
for _ in range(T):
    ans.append(int(input()))

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋ฐ›์•„ ans์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

memo = [0]*(max(ans)+1)
memo[0] = 1
memo[1] = 2
memo[2] = 4

DP ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•ด์ฃผ๊ณ 

for i in range(3,len(memo)):
    memo[i] = ( memo[i-1] + memo[i-2] + memo[i-3] )% 1000000009

์ดˆ๊ธฐํ™” ๋‹ค์Œ ๋‹จ๊ณ„์ธ 3๋ถ€ํ„ฐ ๋๊นŒ์ง€ DP๋ฅผ ๋Œ๋ ค์ค์‹œ๋‹ค.

for values in ans:
    print(memo[values-1])

๊ทธ๋ฆฌ๊ณ  ans์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ DP๋Œ๋ ค MEMO์— ๊ธฐ๋กํ–ˆ์œผ๋‹ˆ memo๊ฐ’์„ ์ฐธ์กฐํ•˜์—ฌ ๋‹ต์„ ์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.




profile
ํ•œ๋ฆผ๋Œ€ํ•™๊ต ์ •๋ณด๊ณผํ•™๋Œ€ 2ํ•™๋…„ ์žฌํ•™์ค‘ / ์œก๊ตฐ ์ •๋ณด๋ณดํ˜ธ๋ณ‘ 22-2๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€