이분탐색 6

[BOJ 1654] 랜선 자르기 (Java)

문제 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 풀이 이분 탐색을 이용해 풀 수 있다. 예시 3 5 5 5 4 오영식이 이미 가지고 있는 랜선의 개수가 3개 5 5 4 내가 필요한 랜선의 개수는 5개이다. 이 조건이 충족될 때까지 이분 탐색을 진행한다. 초기 값 left = 1 right = 5 첫 번째 탐색 left = 1 right = 5 mid = 3 5, 5, 4 를 3으로 나눈 몫을 모두 더하면 랜선의..

[BOJ 1300] K번째 수 - 이분 탐색 (Java)

문제 https://www.acmicpc.net/problem/1300 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 풀이 이게 왜 정답률이 높은지 모르겠다. 막상 풀면 쉬운데 접근법을 생각하기가 쉽지 않다. 구글링을 통해 힌트를 얻어서 풀었다. 예제 설명 예제는 다음과 같다. N = 3, k = 7 3 7 3*3 배열에 각각 행과 열을 곱한 값이 입력되어 있다. 1 2 3 2 4 6 3 6 9 위 값들을 일렬로 쭉 나열 하면 아래와 같다. 1, 2, 3, 2, 4, 6, 3,..

[BOJ 2805] 나무 자르기 (Java)

문제 https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 풀이 절단기의 설정할 수 있는 높이로 이분 탐색을 하여 풀었다. 예제를 그려보면 다음과 같다 적어도 7미터의 나무를 집에 가져가기 위해서 절단기에 설정할 수 있는 높이의 최댓값을 구하는 문제이다. 최초 시작과 끝을 아래와 같이 설정한 후, 이분 탐색을 진행하여 답을 구할 수 있다. 절단기에 설정할 수 있는 최소 H: 0 절단기에 설정할 수 있는 최대 H..

[BOJ 2110] 공유기 설치 (Java, Python)

문제 https://www.acmicpc.net/problem/2110 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net 풀이 이분 탐색을 이용하여 풀 수 있다. 처음에 문제를 이해하는데 시간이 걸려서, 최대한 자세히 풀이를 써보려고 한다. 예제는 다음과 같다. 집의 개수 : 5개, 공유기 개수: 3개 5 3 1 2 8 4 9 여기서 구해야 할 것은?? 가장 인접한 두 공유기 사이의 최대 거리를 출력하는 것이다. 아래와 같이 집이 위치해있다고 가정했을 때, 가..

[Algorithm] LIS 알고리즘 (최장증가수열 알고리즘)

LIS 알고리즘이란? LIS 알고리즘 (Longest Increasing Subsequence Algorithm) 은 최장증가수열 알고리즘으로 증가하는 원소들의 가장 긴 부분집합을 찾는 알고리즘이다. 풀이 1. DP로 풀기 시간 복잡도 O(N^2) 이기 때문에 원소의 개수가 작은 경우에는, 해당 방법으로 문제를 풀 수 있다. {10 20 10 30 20 50} 수열 1 2 3 4 5 6 10 20 10 30 20 50 DP[i] = i번째 원소를 포함하는 증가 수열의 최대 원소 개수 N=1 1 2 3 4 5 6 1 N=2 1 2 3 4 5 6 1 2 현재 index의 원소 값과, 그 미만의 index의 원소 값을 비교 현재 원소보다 작은 원소가 있다면 해당 index의 dp값 중 최대값에 + 1을 한 것..

[프로그래머스] 입국심사 (Java)

문제 https://programmers.co.kr/learn/courses/30/lessons/43238# 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co.kr 풀이 이분탐색을 이용해서 풀어야 하는 문제이다. 결과 값이 크기 때문에 타입에 유의해야 한다. 아래와 같이 초기화 한다. 심사의 최대 시간 = 최소 심사시간 * n 심사의 최소 시간 = 최소 심사시간 그리고 이분탐색을 진행한다. mid값을 총 걸리는 시간이라고 가정한다면, mid값/심사시간 = 해당 심사관이 심사하는 사람의 수가 된다. 그리고 모든 심사관의..