[백준/BOJ] 11053 가장 긴 증가하는 부분 수열 - JAVA

2024. 8. 22. 22:32·알고리즘/문제풀이

백준 BOJ 11053 가장 긴 증가하는 부분 수열 - JAVA - 실버2

문제

https://www.acmicpc.net/problem/11053

문제 분석

조건

  • 첫째 줄에 수열의 크기, 둘째 줄에 수열이 주어짐
  • 가장 긴 증가하는 부분 수열의 길이 출력

풀이방법

  • LIS 알고리즘을 활용하여 풀이

코드

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));
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());
        int[] A = new int[N];
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            A[i] = Integer.parseInt(st.nextToken());
        }

        int[] lis = new int[N];
        int top = 0;
        for (int num : A) {
            if (top == 0 || lis[top - 1] < num) {
                lis[top++] = num;
                continue;
            }
            lis[binarySearch(lis, top, num)] = num;
        }
        System.out.println(top);
    }

    private static int binarySearch(int[] lis, int top, int num) {
        int start = 0;
        int mid = 0;
        int end = top;
        while (start <= end) {
            mid = (start + end) / 2;
            if (lis[mid] == num) {
                return mid;
            } else if (lis[mid] < num) {
                start = mid + 1;
            } else {
                end = mid - 1;
            }
        }
        if (lis[mid] < num) {
            return mid + 1;
        } else {
            return mid;
        }
    }
}

결과

728x90
저작자표시 비영리 변경금지 (새창열림)
'알고리즘/문제풀이' 카테고리의 다른 글
  • [프로그래머스] 72413 합승 택시 요금 - JAVA - Lv.3
  • [백준/BOJ] 9328 열쇠 - JAVA
  • [백준/BOJ] 14939 불 끄기 - JAVA
  • [백준/BOJ] 1520 내리막 길 - JAVA - 골드3
LIRI
LIRI
  • LIRI
    기록
    LIRI
  • 전체
    오늘
    어제
    • 분류 전체보기 (74)
      • 블로그 꾸미기 (0)
      • Spring (6)
      • 바이브코딩 (1)
      • React (3)
      • CS (0)
      • 알고리즘 (57)
        • 개념 (2)
        • 문제풀이 (54)
      • Java (1)
      • DB (1)
      • log (4)
        • SSAFY (3)
        • 궁금 (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    최장증가부분수열
    알고리즘 문제풀이
    싸피
    lv3
    dfs
    Springsecurity
    pccp모의고사
    BFS
    LV2
    비트마스킹
    JWT
    BOJ
    Spring
    dp
    Security
    프로그래머스
    SSAFY
    springboot
    너비우선탐색
    커서ai
    느좋코딩
    그리디
    SSAFY 9기
    리액트
    ssafy 합격 후기
    백준
    알고리즘
    바이브코딩
    LIS
    Java
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
LIRI
[백준/BOJ] 11053 가장 긴 증가하는 부분 수열 - JAVA
상단으로

티스토리툴바