티스토리 뷰
728x90
반응형
문제 요약
- 알고리즘 분류: 이분탐색
- 난이도: Gold2
- 문제내용:
- 수열 A가 주면 가장 긴 증가하는 수열의 길이를 구해라
문제풀이
이번 문제는 LIS문제인데 1,000,000크기 데이터로는 DP로 풀기에는 시간 초과가 난다. 그래서 이분 탐색으로 풀어야 된다. 그 부분은 아래의 사이트에서 확인 해보면 된다. 아래 사이트에 이분 탐색으로 구현한 코드있으면 거기 코드 보고 약간 추가만 해주면 통과가 될거이라고 생각한다.
https://jih3508.tistory.com/46
Code
Python
이번에는 bisect 함수로 간단하게 처리 했다.
import bisect
N = int(input())
array = list(map(int, input().split()))
#처음에 맨 뒤에 값이랑 비교하기위해서 수열 부분에 첫번째 인덱스 값이 옴
sequense = [array[0]]
for num in array[1:]:
if sequense[-1] < num:
sequense.append(num)
else:
sequense[bisect.bisect_left(sequense, num)] = num
print(len(sequense))
Java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] array = new int[N];
int[] sequense = new int[N];
for(int i = 0; i < N; i++) {
array[i] = Integer.parseInt(st.nextToken());
}
// 처음에 맨 뒤에 값이랑 비교하기위해서 수열 부분에 첫번째 인덱스 값이 옴
sequense[0] = array[0];
int start, end, mid;
int size = 0; // sequense의 현재 배열 사이즈
for(int i = 1; i < N; i++) {
if (sequense[size] < array[i]) {
size++;
sequense[size] = array[i];
}else {
start = 0;
end = size;
while(start <= end) {
mid = (start + end) / 2;
if (sequense[mid] >= array[i]) {
end = mid - 1;
}else {
start = mid + 1;
}
}
sequense[start] = array[i];
}
}
System.out.println(size + 1);
}
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[BAEKJOON] 1655 가운데를 말해요 (0) | 2022.12.07 |
---|---|
[BAEKJOON] 1092 배 (0) | 2022.12.06 |
[BAEKJOON] 22193 Multiply (0) | 2022.11.28 |
[BAEKJOON] 1300 K번째 수 (0) | 2022.11.28 |
[BAEKJOON] 2012 등수 매기기 (0) | 2022.11.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- java
- 그리디
- 알고리즘
- JSCODE
- 이론
- Python
- 백준
- BFS
- 파이썬
- 문자열
- spring-boot
- 구현
- 동적 계획법
- 누적합
- 넓이 우선 탐색
- 백트레킹
- 수학
- level2
- 조합
- DFS
- 배열
- 자바
- 그래프
- BaekJoon
- DP
- LeetCode
- 동적계획법
- 재귀호출
- Greedy
- Programmerse
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함