이진탐색

    [DP] 가장 긴 증가하는 부분 수열 (LIS)

    가장 긴 증가하는 부분 수열 가장 긴 증가하는 부분 수열(LIS, Longest Increasing Subsequence)은 대표적인 다이나믹 프로그래밍 문제이다. {10, 20, 10, 30, 20, 50} 과 같은 수열이 주어졌을 때, 수가 점점 증가하는 수열의 가장 긴 길이를 구한다. 1) Dynamic Programming 풀이법 - O(N^2) 파라미터 설명: n = 수열의 길이 arr = 수열을 이루는 숫자가 담긴 배열 d = arr[i]를 마지막 원소로 가질 때 LIS의 길이 d[i] 값을 1로 초기화한다. 현재 위치(i)보다 이전에 위치한 원소(j)가 작은지 확인한다. (i는 기준이 되는 인덱스, j는 i보다 작은 인덱스) arr[i] > arr[j] 이면, 현재 위치 숫자 중 d의 최댓값..

    [이코테] 고정점 찾기 (Python, 이진탐색)

    문제 고정점(Fixed Point)이란 수열의 원소 중에서 값이 인덱스와 동일한 원소를 의미한다. 예를 들어 수열 a = {-15, -4, 2, 8, 13}이 있을 때 a[2] = 2 이므로 고정점은 2가 된다. 하나의 수열이 N개의 서로 다른 원소로 이루어지며, 모든 원소는 오름차순으로 정렬되어있다. 수열에서 고정점이 있다면 고정점을 출력하는 프로그램을 작성해라. 시간 복잡도 O(logN)인 알고리즘을 작성해야 한다. # 예시1 n = 5 arr = [-15, -6, 1, 3, 7] # res = 3 # 예시2 n = 7 arr = [-15, -4, 2, 8, 9, 13, 15] # res = 2 # 예시3 n = 7 arr = [-15, -4, 3, 8, 9, 13, 15] # res = -1 풀이 ..