File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed
Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change 1+ //
2+ // main.swift
3+ // CodingTest
4+ //
5+ // Created by SeokHyun on 2022/10/14
6+
7+ import Foundation
8+
9+ /*
10+ 1. A의 맨 뒤에 넣을 수 있는 경우
11+ sol) - 맨 뒤 숫자와 기준 number를 비교해서 number가 더 크면 맨 뒤에 넣을 수 있다.
12+
13+ 2. A중간 혹은 처음에 넣어야 하는 경우
14+ sol) - lower bound를 이용한다.
15+ - 배열 A에 [2 4 5 6]이 있고 1을 넣어야 한다면 lower bound를 통해 1이라면 index를 얻을 수 있고, 그 index의 값을 1로 업데이트 한다.
16+ */
17+
18+ //12015 가장 긴 증가하는 부분 수열2
19+ func lowerBound( find: Int , numbers: [ Int ] ) -> Int {
20+ var start = 0 , end = numbers. count - 1
21+ var mid = ( start + end) / 2
22+
23+ while start < end {
24+ mid = ( start + end) / 2
25+ if numbers [ mid] < find {
26+ start = mid + 1
27+ } else {
28+ end = mid
29+ }
30+ }
31+
32+ return end
33+ }
34+
35+ let input = Int ( readLine ( ) !) !
36+
37+ var numbers : [ Int ] = readLine ( ) !. split ( separator: " " ) . map { Int ( String ( $0) ) ! }
38+
39+ var dp : [ Int ] = [ ]
40+ for number in numbers {
41+ if dp. isEmpty {
42+ dp. append ( number)
43+ continue
44+ }
45+
46+ if dp [ dp. count - 1 ] < number {
47+ dp. append ( number)
48+ } else {
49+ let index = lowerBound ( find: number, numbers: dp)
50+ dp [ index] = number
51+ }
52+ }
53+ print ( dp. count)
You can’t perform that action at this time.
0 commit comments