Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 생성자
- 내부 클래스
- 17472
- 와일드카드
- 열거형
- 백준
- 프림알고리즘
- 추상 클래스
- Encapsulation
- inheritance
- polymorphism
- java
- Final
- 캡슐화
- 버퍼비우기
- 상속
- 최소신장트리
- nextInt
- 다형성
- 추상화
- python
- abstract
- 객체 지향
- Scanner
- 제네릭
- 객체지향
- 인터페이스
- enum
- this
Archives
- Today
- Total
쫑쫑이의 블로그
백준 12738 가장 긴 증가하는 부분 수열 3 Java [LIS] 본문
https://www.acmicpc.net/problem/12738
이전에 푼 가장 긴 증가하는 부분 수열 2 문제보다 수열 A를 이루는 숫자가 범위가 더 크고, 음수도 들어온다
푸는 방법은 다르지 않지만 이번에는 Arrays.binarySearch 메서드를 사용해서 풀이를 해봤다
Arrays.binarySearch 메서드 값은 일치하는 숫자가 있으면 해당 인덱스를 반환하고,
일치하는 숫자가 없으면 절대값으로 바꾸고 -1 해주면 들어갈 인덱스값이 된다
import java.io.*;
import java.util.*;
public class Main {
static final int MAX_N = 1000000;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = Arrays.stream(br.readLine().split(" "))
.mapToInt(Integer::parseInt).toArray();
int[] D = new int[MAX_N];
D[0] = arr[0];
int size = 1;
for (int i = 1; i < N; i++) {
int index = Arrays.binarySearch(D, 0, size, arr[i]);
index = index >= 0 ? index : Math.abs(index) - 1;
D[index] = arr[i];
if (index == size) size++;
}
System.out.println(size);
}
}
문제접근법은 이전에 푼 것과 같다
'알고리즘 > 백준' 카테고리의 다른 글
백준 17404 RGB거리 2 Java [DP] (0) | 2022.10.23 |
---|---|
백준 14003 가장 긴 증가하는 부분 수열 5 Java [LIS] (0) | 2022.10.22 |
백준 12015 가장 긴 증가하는 부분 수열 2 Java [LIS] (0) | 2022.10.22 |
백준 1644 소수의 연속합 Java [에라토스테네스의 체] (0) | 2022.10.22 |
백준 1504 특정한 최단 경로 Java [다익스트라] (0) | 2022.10.20 |