728x90
해당 문제는 이분 탐색으로 해결했습니다.
주어진 N만큼 반복문을 시행합니다.
arr의 맨 뒤 값보다 현재 주어진 값보다 작을 경우
arr의 맨 뒤에 해당 값으로 업데이트 해줍니다.
그 반대일 경우
이분 탐색으로 주어진 값의 인덱스를 찾아줍니다.
파이썬 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int N;
static int [] arr;
static int ansIdx = 1;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine()," ");
arr = new int[N];
arr[0] = Integer.parseInt(st.nextToken());
for(int i=1; i<N ; i++){
int value = Integer.parseInt(st.nextToken());
if(arr[ansIdx-1] < value) {
ansIdx ++;
arr[ansIdx-1] = value;
}
else{
int left = 0, right =ansIdx;
while(left < right){
int mid = (left + right)/ 2;
if(arr[mid] < value) left = mid +1 ;
else right = mid ;
}
arr[left] = value;
}
}
System.out.println(ansIdx);
}
}
'Language > JAVA' 카테고리의 다른 글
[JAVA][백준 8980][그리디, 정렬] 택배 - 컴도리돌이 (0) | 2022.08.16 |
---|---|
[JAVA][백준 17845][배낭문제] 수강 과목 - 컴도리돌이 (0) | 2022.08.02 |
[Java][백준 2470][투 포인터] 두 용액 - 컴도리돌이 (0) | 2022.07.29 |
[JAVA][백준 2122][그리디 정렬] 센서 - 컴도리돌이 (0) | 2022.07.27 |
[JAVA][백준 20437][문자열] 문자열 게임 2 - 컴도리돌이 (0) | 2022.07.25 |