Loading...
2023. 4. 1. 02:07

[Java]자바로 이분탐색 연습 -기본, lower bound, upper bound-

1. 기본문제1 n개의 숫자가 오름차순으로 정렬된 상태로 주어집니다. 이후 m개의 숫자가 추가적으로 주어졌을 때, 각각의 숫자가 처음 주어진 n개의 숫자 중 몇 번째로 나온 숫자인지를 구하는 프로그램을 작성해보세요. 2. 풀이 배운대로 기본에 충실하게 만들어보자 Main 클래스 내에서 public static int 함수로 binarysearch를 만들고, mid 포인트는 start + (end - start)/2로 하고 삼분탐색하지 말고, 이분탐색으로 arr[mid] >= target인 경우와, arr[mid] = ..

이분탐색 올바른 사고 연습하기 1편

1. 문제1 1072번: 게임 (acmicpc.net) 1072번: 게임 김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시 www.acmicpc.net 2. 풀이1 탐색범위는 x+1부터 충분히 큰 수까지.. x가 제한이 10의 9제곱인데.. 이는 입력으로 주어지는 x가 10의 9제곱이지 가능한 제한이 10의 9제곱이라는 뜻은 아니다. 그래서 대충 10의 18제곱까지 탐색하도록 범위를 잡았다 그리고 절대로 지지 않는다고 했기 때문에... x 기준으로 현재 x+k를 잡았다면... y값은 y+k로 바뀌겠지 그리고 그때 변화된 승률도 (y+k)*100//(..

이분탐색 응용력 키우기 연습1 -차이가 가장 가까운 값을 찾는 방법-

1. 문제 2428번: 표절 (acmicpc.net) 2428번: 표절 첫째 줄에 제출한 솔루션의 개수 N이 주어진다. 둘째 줄에는 각 솔루션 파일의 크기 size(F1), size(F2), ..., size(FN)이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ size(Fi) ≤ 100,000,000) 솔루션 파일의 크기는 정수이 www.acmicpc.net 2. 풀이 $F_{1}, F_{2}, ... , F_{n}$이 주어질때, $F_{i} = 0.9*F_{j}$인 $(F_{i}, F_{j})$의 개수를 구하는 문제 조건이 2개가 있는데.. 사실 $F_{i} = 0.9*F_{j}$을 만족하는 최대 인덱스 j를 찾는다 그러면 $F_{i}, F_{i+1}$, ..., $F_{i}, F_{j}$까지가..

2022. 10. 20. 01:39

다이나믹 프로그래밍 - 최장 증가 수열(LIS)을 찾는 알고리즘 배우기

1. 문제 어떤 수열이 왼쪽에서 오른쪽으로 순서대로 나열된다. 3,2,6,4,5,1.... 만약 이러한 나열된 순서를 유지하면서, 크기가 점진적으로 커지면서, 가장 긴 부분수열은 어떻게 찾을 수 있을까 이러한 부분수열은 연속적으로 고를 필요는 없다. 예를 들어 위 수열에서 3,4,5는 크기가 점점 커지는 부분수열이다. 2. 완전 검색 단순하게 완전 탐색을 수행해서 찾아낼 수도 있다 주어진 수열의 모든 부분집합을 구한다. 부분집합의 원소들이 증가하는 수열인지 검사한다. 증가하는 수열일때, 부분수열의 길이의 최댓값을 갱신한다. 당연히, 부분집합의 크기가 긴 것부터 조사하면, 처음으로 찾게되는 증가수열이 가장 긴 증가수열일 것이다. #완전탐색으로 최장증가 부분수열 찾기 s = [3,2,6,4,5,1] n = ..

2022. 9. 18. 04:05

이진 탐색 정복 -array를 쓰지 않아도 되는 경우-

1. 문제1 13706번: 제곱근 (acmicpc.net) 13706번: 제곱근 첫째 줄에 양의 정수 N이 주어진다. 정수 N의 제곱근은 항상 정수이며, N의 길이는 800자리를 넘지 않는다. www.acmicpc.net 정수 n의 제곱근을 찾는 프로그램을 작성 2. 풀이1 이분탐색으로 풀수있다는데 어떻게 가능할까 처음에는 이분탐색 알고리즘을 그대로 써서 n의 제곱근을 찾기 위해 0부터 n까지 숫자를 리스트에 담아두고 mid 포인트를 찾아서 array[mid]의 제곱이 target인 n이 되는 mid를 찾아 array[mid]를 return하는 방법으로 했는데 from sys import stdin def binary_search(array,target,start,end): while start targ..