๋ฐฑ์ค 11053 ํ์ด์ฌ
https://www.acmicpc.net/problem/11053
์ด๋ฒ ๋ฌธ์ ๋ ์์ด์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. LIS(Longest Increasing Subsequence)๋ผ๊ณ ํ๋ค.
A๋ผ๋ ์์ด {10, 20, 10, 30, 20, 50}์ด ์๋ค๋ฉด {10, 20, 10, 30, 20, 50}์ด ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ์์ด์ด๋ค.
์ด๋ฒ ๋ฌธ์ ๋ ์งํฉ์์ ํ์ฌ ์์น๊น์ง ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ฅผ ๊ธฐ์ตํ๋ ๋ฐฉ๋ฒ์ ์ด๋ป๊ฒ ์ ์ฅํ ์ง๊ฐ ๊ด๊ฑด์ด๋ค. ์งํฉ์ ์ฒด ์ค ๊ฐ์ฅ ๊ธด ์์ด์ด๊ธฐ ๋๋ฌธ์... ์งํฉ์ ์์น์ค ๊ฐ์ฅ ๊ธด ๊ฐ์ ์ถ๋ ฅํ๊ฑฐ๋... ๊ฐ์ฅ ๊ธด ๊ฐ์ ์ ์งํ๋ฉด์ ์ต์ข ์ ์ผ๋ก ๊ฐ์ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ ๋๊ฐ์ง๊ฐ ์๋ค.
Python ํ์ด 1
ํด๋น ํ์ด๋ ์งํฉ์ ์์น๋ณ๋ก ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ์ ์ฅํ๊ณ ์ต์ข ์ ์ผ๋ก ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ ๋ฐฉ์์ด๋ค.
import sys
read = sys.stdin.readline
N = int(read())
A = [0] + list(map(int, read().split()))
cache = [0] * (N+1)
cache[1] = 1
for i in range(2, N+1):
temp = []
for j in range(1, i):
if A[j] < A[i]:
temp.append(cache[j])
cache[i] = max(temp) + 1 if temp else 1
print(max(cache))
- ์บ์์ ๊ฐ์ฅ ์ต์ด๊ฐ์ ๊ธธ์ด๊ฐ 1์ด๊ธฐ ๋๋ฌธ์ 1๋ก ์ ์ฅํ๋ค.
- 2๋ถํฐ ์งํฉ์ ๋ง์ง๋ง๊น์ง... ํ์ฌ ๋ณด๋ค ์ด์ ์์น์ ์ซ์๊ฐ ์ ์ ๊ฒฝ์ฐ... ํด๋น ์์น์์์ ๊ฐ์ฅ ๊ธด ์์ด์ ๊ธธ์ด ๊ฐ์ ๋ฆฌ์คํธ์ ์์๋ก ์ถ๊ฐํ๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์ ์บ์๊ฐ์ ํ์ฌ ์์น๋ณด๋ค ์ ์ ์ซ์๋ฅผ ๊ฐ๊ณ ์๋ ์ ์์น์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด์ +1ํ ๊ฐ์ด๋ค.
Python ํ์ด 2
ํ์ด1์ ๊ฒฝ์ฐ ๋งค๋ฒ for๋ฌธ์ 2๊ฐ ์ฌ์ฉํ๋๋ฐ.... ํด๋น ์์น๊น์ง ํ์ธํด์ค์ผํ๋ค. ๊ทธ๋์ ์งํฉ์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ์๊ฐ๋ ์ค๋ ๊ฑธ๋ฆฐ๋ค. ์ด๋ฒ ํ์ด์์๋ for๋ฌธ์ 2๊ฐ ์ฌ์ฉํ์ง๋ง... ์ด์ ์์น๊ฐ ์๋... ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ์์ด์ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋กํ๋ ๋ฆฌ์คํธ๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๋ค.
import sys
read = sys.stdin.readline
N = int(read())
seq = list(map(int, read().split()))
counts = [seq[0]]
for i in range(1, N):
if counts[-1] < seq[i]:
counts.append(seq[i])
else:
idx = 0
for j in range(len(counts)):
if counts[j] < seq[i]:
idx += 1
else:
counts[idx] = seq[i]
break
print(len(counts))
- ์ด๊ธฐ ๊ฐ์ผ๋ก ์ฒซ๋ฒ ์งธ ์๋ฅผ counts ๋ฆฌ์คํธ์ ๋ฃ์ด์ค๋ค.
- ์ฃผ์ด์ง ์์ด์ ์ซ์๋ฅผ ํ์ธํ๋๋ฐ ๋๊ฐ์ง ์กฐ๊ฑด์ผ๋ก ๋ถ๊ธฐํ๋ค.
- counts ์์ด์ ๋ง์ง๋ง ์ซ์๋ณด๋ค ํฌ๋ฉด ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ค.
- ๋ง์ง๋ง ์์ด๋ณด๋ค ์์ผ๋ฉด counts๋ฅผ ์ํํ๋ฉด์ ๊ต์ฒดํ ์ซ์๋ฅผ ์ฐพ๋๋ค.
- ์ค๋ฆ์ฐจ์์ ์ ์งํ๊ณ ์์น๋ฅผ ์ฐพ์ผ๋ฉด ๋ ํฐ ์ซ์์ ์๋ฆฌ๋ฅผ ๊ต์ฒดํ๋ค.
- ๋ ๊ธด ์์ด์ ์์ด์ด ๋ง๋ค์ด ์ง ์ ์๊ธฐ ๋๋ฌธ์ ํฐ ์ซ์์ ๊ต์ฒดํ๋ค.
- ์ค๋ฆ์ฐจ์์ ์ ์งํ๊ณ ์์น๋ฅผ ์ฐพ์ผ๋ฉด ๋ ํฐ ์ซ์์ ์๋ฆฌ๋ฅผ ๊ต์ฒดํ๋ค.
- ์ต์ข ์ ์ผ๋ก ๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ค.
๋ฆฌ์คํธ์ ์ซ์๋ค์ ๊ณ์ ๊ต์ฒดํด์ฃผ๋ ์ด์ ๋ ๋ ๊ธด ๊ธธ์ด์ ์์ด์ด ์๋์ง ํ์ธํ๊ธฐ ์ํจ์ด๋ค.
A = {7, 8, 9, 1, 2, 3, 4} ๋ต์ 1,2,3,4 ๊ธธ์ด 4 ์ด๋ค.
๊ฐ์ฅ ํฌ๊ณ ์์ ์ซ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฌด์ธ๊ฐ ๊ตฌ๋ถํ๋ค๋ฉด... ์์ 7, 8, 9 ๊น์ง ์ถ๊ฐํ๋ค๊ฐ ๋ค์ ์ถ๊ฐํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๋ ๊ฒ ์ซ์๋ฅผ ์์น์ ๋ง๊ฒ ๊ต์ฒดํด๊ฐ๋ค๋ฉด ์ค๊ฐ ์ดํ์ ์๋ ๋ ๊ธด ๊ธธ์ด์ ๋ถ๋ถ ์์ด์ ์ก์๋ผ ์ ์๋ค.
๋๊ธ