๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DP

[๋ฐฑ์ค€]11053๋ฒˆ: ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด / 11722๋ฒˆ: ๊ฐ€์žฅ ๊ธด ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด

by syLim___ 2023. 2. 26.
728x90

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

 

11053๋ฒˆ: ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด

์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜์—ด A = {10, 20, 10, 30, 20, 50} ์ธ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์€ A = {10, 20, 10, 30, 20, 50} ์ด

www.acmicpc.net

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

 

11722๋ฒˆ: ๊ฐ€์žฅ ๊ธด ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด

์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€์žฅ ๊ธด ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜์—ด A = {10, 30, 10, 20, 20, 10} ์ธ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ๊ธด ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์€ A = {10, 30, 10, 20, 20, 10} 

www.acmicpc.net


์ด ๋ฌธ์ œ ์œ ๋ช…ํ•œ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค

๋‚œ dp์ธ๊ฑฐ ์•Œ๊ณ  ํ’€๋ ค๊ณ  ํ•ด๋„ ์•„์ด๋””์–ด๊ฐ€ ์ž˜ ๋– ์˜ค๋ฅด์ง€ ์•Š์•„์„œ ๋ง‰ํ˜”๋˜ ๋ฌธ์ œ...

 

 

ํ’€์ด

  • ์ˆ˜์—ด A์™€ ๊ธธ์ด๊ฐ€ ๋˜‘๊ฐ™์€ ๋ฐฐ์—ด dp๋ฅผ ๋งŒ๋“ ๋‹ค.
  • dp์—๋Š” ์ˆ˜์—ด์˜ ํŠน์ •์›์†Œ๊ฐ€ ๋งˆ์ง€๋ง‰์ด ๋˜๋Š” ๊ฒฝ์šฐ ๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ธธ์ด๊ฐ€ ์ €์žฅ๋œ๋‹ค.
  • ์ˆ˜์—ดA๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ํ•ด๋‹น ์›์†Œ๋ณด๋‹ค ์•ž์— ์œ„์น˜ํ•˜๋Š” ์›์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ฒดํฌํ•œ๋‹ค. (์ด์ค‘ for๋ฌธ ๋Œ๋ ค์•ผํ•จ)
    • ์•ž์˜ ์›์†Œ ๊ฐ’ < ํ˜„์žฌ ์›์†Œ ๊ฐ’ ์„ ๋งŒ์กฑํ•˜๋ฉด(์˜ค๋ฆ„์ฐจ์ˆœ ์กฐ๊ฑด),
    • ์•ž์˜ ์›์†Œ๊ฐ€ ๋งˆ์ง€๋ง‰ ์›์†Œ์ธ ๋ถ€๋ถ„์ˆ˜์—ด์— ํ˜„์žฌ ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์„ ๊ฒฝ์šฐ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋œ๋‹ค๋ฉด ํ˜„์žฌ dp๊ฐ’์„ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.
    • ์ฆ‰, A[i] > A[j] ๋ฅผ ๋งŒ์กฑํ•˜๋ฉด์„œ DP[i] < DP[i]+1 ์ธ ๊ฒฝ์šฐ ๊ฐฑ์‹ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. (i=ํ˜„์žฌ ์ธ๋ฑ์Šค, j=๋น„๊ตํ•˜๋Š” ์•ž์ชฝ ์›์†Œ ์ธ๋ฑ์Šค)

 

๊ฐ€์žฅ ๊ธด ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด ๋ฌธ์ œ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋‘๊ฐ€์ง€๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š”๋ฐ,

1. ๋ถ€๋“ฑํ˜ธ๋งŒ ๋ฐ”๊ฟ”์ค€๋‹ค

2. .reverse() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์ˆ˜์—ด๋ฌธ์ œ๋กœ ๋ฐ”๊พธ์–ด ํ’€์–ด์ค€๋‹ค

 

#๊ฐ€์žฅ ๊ธด ๊ฐ์†Œํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด ๋ฌธ์ œ

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


dp = [1]*n

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

print(max(dp))

 

728x90