Algorithm & Data Structures/BOJ

12015. 가장 증가하는 부분수열 2 (Java)

Geisha 2024. 1. 10. 11:05

비트연산자개념을 사용하여 while문 하나로 이분탐색을 구현한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
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());
        List<Integer> list = new ArrayList<>();

        list.add(0);

        while(N-->0){
            int val = Integer.parseInt(st.nextToken());
            if(val > list.get(list.size()-1)) list.add(val);
            else{
                int left = 0;
                int right = list.size()-1;
                while(left<right) {
                    int mid = (left+right) >> 1;
                    if (list.get(mid) < val) left = mid+1;
                    if (list.get(mid)>= val) right = mid;
                }
                list.set(right,val);
            }
        }
        System.out.println(list.size()-1);
    }
}