โ๋ฌธ์
https://www.acmicpc.net/problem/2565
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 109240 KB, ์๊ฐ: 92 ms
๋ฌธ์ ์ค๋ช
๋ ์ ๋ด๋ A์ B ์ฌ์ด์ ํ๋ ๋์ฉ ์ ๊น์ค์ ์ถ๊ฐํ๋ค ๋ณด๋ ์ ๊น์ค์ด ์๋ก ๊ต์ฐจํ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ์๋ค. ํฉ์ ์ ์ํ์ด ์์ด ์ด๋ค ์ค ๋ช ๊ฐ์ ์ ๊น์ค์ ์์ ์ ๊น์ค์ด ๊ต์ฐจํ์ง ์๋๋ก ๋ง๋ค๋ ค๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด, < ๊ทธ๋ฆผ 1 >๊ณผ ๊ฐ์ด ์ ๊น์ค์ด ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒฝ์ฐ A์ 1๋ฒ ์์น์ B์ 8๋ฒ ์์น๋ฅผ ์๋ ์ ๊น์ค, A์ 3๋ฒ ์์น์ B์ 9๋ฒ ์์น๋ฅผ ์๋ ์ ๊น์ค, A์ 4๋ฒ ์์น์ B์ 1๋ฒ ์์น๋ฅผ ์๋ ์ ๊น์ค์ ์์ ๋ฉด ๋จ์์๋ ๋ชจ๋ ์ ๊น์ค์ด ์๋ก ๊ต์ฐจํ์ง ์๊ฒ ๋๋ค.
< ๊ทธ๋ฆผ 1 >
์ ๊น์ค์ด ์ ๋ด๋์ ์ฐ๊ฒฐ๋๋ ์์น๋ ์ ๋ด๋ ์์์๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง๋ค. ์ ๊น์ค์ ๊ฐ์์ ์ ๊น์ค๋ค์ด ๋ ์ ๋ด๋์ ์ฐ๊ฒฐ๋๋ ์์น์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง ๋, ๋จ์์๋ ๋ชจ๋ ์ ๊น์ค์ด ์๋ก ๊ต์ฐจํ์ง ์๊ฒ ํ๊ธฐ ์ํด ์์ ์ผ ํ๋ ์ ๊น์ค์ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
โ๐ปํ์ด
DP ๋ฌธ์ ์ด๋ค.
๊ทธ๋ฆผ์ ๋ดค์ ๋, ์ฐ์ A๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ ๊ฒ์ด ์ข๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ต์ฐจํ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ๋ค. B๊ฐ ์ด์ ์ ๊น์ค๋ณด๋ค ํฌ๋ค๋ฉด ๊ฒน์น์ง ์๋๋ค.
์ฆ, (3, 3)์ ๊ฒฝ์ฐ (1, 8), (2, 2)๋ ๊ฒน์น์ง ์๋๋ค.
์ ์ฒด ์ ๊น์ค์์ ๊ฒน์น์ง ์๋ ์ ๊น์ค์ ์ต๋๊ฐ์ ๋นผ๋ฉด ๊ทธ๊ฒ์ด ์์ ์ผ ํ๋ ์ต์์ ์ ๊น์ค์ ๊ฐ์๊ฐ ๋๋ค.
๐ป์ฝ๋
import sys
input = sys.stdin.readline
n = int(input())
wires = [list(map(int, input().split())) for _ in range(n)]
wires.sort()
dp = [1] * n
for i in range(n):
for j in range(i):
if wires[i][1] > wires[j][1]:
dp[i] = max(dp[j] + 1, dp[i])
print(n - max(dp))
๐ํ๊ธฐ
DP๋ผ๋ ๊ฑธ ์์๋ Memorization์ ์ด๋ป๊ฒ ์จ์ผํ ์ง ์ ์๊ฐ๋์ง ์๋๋ค.
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 5215.ํ๋ฒ๊ฑฐ ๋ค์ด์ดํธ/Python - D3 (1) | 2024.11.12 |
---|---|
[SWEA] 2805.๋์๋ฌผ ์ํํ๊ธฐ/Python - D3 (0) | 2024.11.11 |
[Baekjoon] 13305.์ฃผ์ ์/Python - Silver3 (0) | 2024.11.01 |
[์ํํฐ์ด] ์ง๊ฒ๋ค๋ฆฌ/Python - Lv.3 (0) | 2024.10.30 |
[์ํํฐ์ด] ์ฅ์ ๋ฌผ ์ธ์ ํ๋ก๊ทธ๋จ/Python - Lv.2 (0) | 2024.10.29 |