💬 문제
https://www.acmicpc.net/problem/11722
💬 Idea
- dp라는 배열을 만든다. 이 때 dp에는 각 값 별 가장 긴 부분수열의 길이가 저장된다.
- A를 돌면서 이전 인덱스들에 본인보다 큰 값이 있는지 검사한다.
- 만약 본인보다 큰 값이 있다면 해당 인덱스의 dp(가장 긴 부분수열의 길이) + 1 과 자기 자신 중 더 큰 값을 dp에 저장하며 갱신한다.
- dp의 가장 큰 값을 출력한다.
💬 풀이
func solution11722(){letN=Int(readLine()!)!
letA=readLine()!.split(separator:"").map({Int(String($0))! })vardp=Array(repeating:1, count: N)foriin0..<A.count {forjin0..<i {ifA[j]>A[i]{dp[i]=max(dp[i],dp[j]+1)}}}print(dp.max()!)}solution11722()
💬 문제https://www.acmicpc.net/problem/11722
💬 Idea💬 풀이