โ๏ธ ๋ฌธ์
[๋ฐฑ์ค/BOJ] 1965๋ฒ: ์์๋ฃ๊ธฐ(https://www.acmicpc.net/problem/1965)
์ ์ก๋ฉด์ฒด ๋ชจ์์ ์์๊ฐ ์ผ๋ ฌ๋ก ๋์ด์ ์๋ค. ์์๋ง๋ค ํฌ๊ธฐ๊ฐ ์ฃผ์ด์ ธ ์๋๋ฐ, ์์ ์๋ ์์์ ํฌ๊ธฐ๊ฐ ๋ค์ ์๋ ์์์ ํฌ๊ธฐ๋ณด๋ค ์์ผ๋ฉด, ์์ ์๋ ์์๋ฅผ ๋ค์ ์๋ ์์ ์์ ๋ฃ์ ์๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด ์์์๋ถํฐ ์์๋๋ก ํฌ๊ธฐ๊ฐ (1, 5, 2, 3, 7)์ธ 5๊ฐ์ ์์๊ฐ ์๋ค๋ฉด, ํฌ๊ธฐ 1์ธ ์์๋ฅผ ํฌ๊ธฐ 5์ธ ์์์ ๋ฃ๊ณ , ๋ค์ ์ด ์์๋ฅผ ํฌ๊ธฐ 7์ธ ์์ ์์ ๋ฃ์ ์ ์๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์์๋ฅผ ๋ฃ์ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ ์ ์๋ค. ์์ ์์์ ์ฐจ๋ก๋๋ก ํฌ๊ธฐ๊ฐ 1, 2, 3, 7์ธ ์์๋ฅผ ์ ํํ๋ฉด ์ด 4๊ฐ์ ์์๊ฐ ํ ๊ฐ์ ์์์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์์์ ํฌ๊ธฐ๊ฐ ์ฃผ์ด์ง ๋, ํ ๋ฒ์ ๋ฃ์ ์ ์๋ ์ต๋์ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐ค ์ ์ถ๋ ฅ ์์
๐ง ๋์ด๋/์์ ์๊ฐ
โ ๋์ด๋: solved.ac ๊ธฐ์ค S2
โ ์์ ์๊ฐ: ์ธก์ X
โ ๊ถ์ฅ ์๊ฐ: 1์๊ฐ 15๋ถ
๐ก ํ์ด
1) ๋ฌธ์ ์ดํด
์์ ์๊ธฐ๊ฐ ์ ํ ์์ง๋ง LIS ๊ธธ์ด๋ฅผ ์ฐพ๋ ๋ฌธ์ ๋ค.
์คํฐ๋์์๋ '๊ฐ์ฅ ๊ธด ๊ฐ์ํ๋ ๋ถ๋ถ ์์ด' ๋ฌธ์ ๋ฅผ ํ์์๊ณ ๊ฐ์ธ์ ์ผ๋ก๋ ๋ฐฑ์ค์์ '๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด' ๋ฌธ์ ๋ฅผ ํ์๊ธฐ ๋๋ฌธ์ ์ฝ๋ ํ์ ์ก๋ ๋ฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ์ง๋ ์์๋ค. ์ด์ ์ ํผ ๋ฌธ์ ๋ค๊ณผ ์ฝ๋๊ฐ ํฌ๊ฒ ๋ค๋ฅด์ง๋ ์์์ ์ค๋ ๋ฌธ์ ๋ ๋ก์ง์ ๋ํด์ ์์ธํ ์์ฑํ์ง๋ ์๊ฒ ๋ค.
2) ์ ์ฒด ์ฝ๋
N = int(input())
boxes = list(map(int, input().split()))
DP = [1]*N
for i in range(1, N):
for j in range(i):
if boxes[i] > boxes[j]:
DP[i] = max(DP[i], DP[j]+1)
print(max(DP))
3) ์ด๋ ค์ ๋ ์ /๋ฐฐ์ด ์
๐จ ์ด๋ ค์ ๋ ์
- ์์
โ ๋ฐฐ์ด ์
- LIS ์๊ณ ๋ฆฌ์ฆ ์ฝ๋๋ ํ์คํ๊ฒ ์ธ์๋๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.