Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4b43d64

Browse files
authored
Add files via upload
1 parent e4d456a commit 4b43d64

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

5주차/김석현/main.swift

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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)

0 commit comments

Comments
 (0)