[백준/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
  • 전체
    오늘
    어제
    • 분류 전체보기 (73)
      • 블로그 꾸미기 (0)
      • Spring (6)
      • React (3)
      • CS (0)
      • 알고리즘 (57)
        • 개념 (2)
        • 문제풀이 (54)
      • Java (1)
      • DB (1)
      • log (4)
        • SSAFY (3)
        • 궁금 (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    ssafy 합격 후기
    springboot
    Springsecurity
    도대체왜
    lv3
    리액트
    SSAFY 9기
    최장증가부분수열
    dp
    싸피
    알고리즘 문제풀이
    BOJ
    백준
    알고리즘
    LV2
    BFS
    그리디
    pccp모의고사
    LIS
    너비우선탐색
    Java
    Spring
    골드1
    프로그래머스
    Security
    JWT
    불 끄기
    비트마스킹
    SSAFY
    dfs
  • 최근 댓글

  • 최근 글

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

티스토리툴바