๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1965๋ฒˆ ์ƒ์ž๋„ฃ๊ธฐ (Python)

mallin 2024. 11. 27. 14:50

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

๐Ÿ“Œ ๋ฌธ์ œ

์ •์œก๋ฉด์ฒด ๋ชจ์–‘์˜ ์ƒ์ž๊ฐ€ ์ผ๋ ฌ๋กœ ๋Š˜์–ด์„œ ์žˆ๋‹ค. ์ƒ์ž๋งˆ๋‹ค ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์ ธ ์žˆ๋Š”๋ฐ, ์•ž์— ์žˆ๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๊ฐ€ ๋’ค์— ์žˆ๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์œผ๋ฉด, ์•ž์— ์žˆ๋Š” ์ƒ์ž๋ฅผ ๋’ค์— ์žˆ๋Š” ์ƒ์ž ์•ˆ์— ๋„ฃ์„ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•ž์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ํฌ๊ธฐ๊ฐ€ (1, 5, 2, 3, 7)์ธ 5๊ฐœ์˜ ์ƒ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด, ํฌ๊ธฐ 1์ธ ์ƒ์ž๋ฅผ ํฌ๊ธฐ 5์ธ ์ƒ์ž์— ๋„ฃ๊ณ , ๋‹ค์‹œ ์ด ์ƒ์ž๋ฅผ ํฌ๊ธฐ 7์ธ ์ƒ์ž ์•ˆ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ƒ์ž๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์•ž์˜ ์˜ˆ์—์„œ ์ฐจ๋ก€๋Œ€๋กœ ํฌ๊ธฐ๊ฐ€ 1, 2, 3, 7์ธ ์ƒ์ž๋ฅผ ์„ ํƒํ•˜๋ฉด ์ด 4๊ฐœ์˜ ์ƒ์ž๊ฐ€ ํ•œ ๊ฐœ์˜ ์ƒ์ž์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

์ƒ์ž์˜ ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ํ•œ ๋ฒˆ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์˜ ์ƒ์ž ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

๐Ÿ“Œ ์ž…๋ ฅ

ํŒŒ์ผ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์€ ์ƒ์ž์˜ ๊ฐœ์ˆ˜ n (1 ≤ n ≤ 1000)์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” ๊ฐ ์ƒ์ž์˜ ํฌ๊ธฐ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ƒ์ž์˜ ํฌ๊ธฐ๋Š” 1,000์„ ๋„˜์ง€ ์•Š๋Š” ์ž์—ฐ์ˆ˜์ด๋‹ค.

 

 

๐Ÿ“Œ ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ํ•œ ์ค„์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์˜ ์ƒ์ž ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 


๐Ÿ“Œ ํ’€์ด ๋ฐฉ์‹ 

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

ํ’€๋ฉด์„œ ๊ฐ€์žฅ ์–ด๋ ค์› ๋˜๊ฒŒ ๋ฐฑ์ค€ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์ด์ค‘ for ๋ฌธ์€ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌด์กฐ๊ฑด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค๋Š” ๊ณ ์ • ๊ด€๋…์ด์˜€๋Š”๋ฐ์š”. 

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์ด์ค‘ for ๋ฌธ์„ ์‚ฌ์šฉํ•ด๋„ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

์ด ์ ๊ณผ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP) ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

1. ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ 

2. ํ•ด๋‹น ์ƒ์ž๋ฅผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๊ณ , 

3. ๊ทธ ์•ž์— ์žˆ๋Š” ์ƒ์ž๋“ค์— ๋Œ€ํ•ด์„œ ๋˜ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ์ž๊ธฐ ์ƒ์ž๋ณด๋‹ค ์ž‘์€ ์ƒ์ž๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 

4. ๋งŒ์•ฝ ์ž๊ธฐ ์ƒ์ž๋ณด๋‹ค ์ž‘์€ ์ƒ์ž๊ฐ€ ์žˆ์œผ๋ฉด, max(์ž‘์€ ์ƒ์ž์— ํ•œ ๋ฒˆ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์˜ ์ƒ์ž ๊ฐœ์ˆ˜ + 1, ํ˜„์žฌ ์ƒ์ž์˜ ํ•œ๋ฒˆ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์˜ ์ƒ์ž ๊ฐœ์ˆ˜) ๋ฅผ ๋น„๊ตํ•ด์„œ ์ €์žฅํ•ด์ค๋‹ˆ๋‹ค. 

5. ์ตœ๋Œ€ ์ƒ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ ์ฝ”๋“œ

n = int(input())
boxes = [int(box) for box in input().split()]
dp = [1 for _ in range(n)]

for i in range(1, n):
    for j in range(i):
        if boxes[j] < boxes[i]:
            dp[i] = max(dp[j] + 1, dp[i])

print(max(dp))