Loading...
2023. 3. 21. 23:42

이분탐색을 이용해서 MN개의 조합에서 k번째 수를 찾는 놀라운 방법

1. 문제 1300번: K번째 수 (acmicpc.net) 1300번: K번째 수 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B www.acmicpc.net 2. 풀이 k 제한이 커서 그런지 이전에 배운 우선순위 큐 방법으로 풀면 시간초과로 통과를 못한다 import heapq from sys import stdin n = int(stdin.readline()) k = int(stdin.readline()) q = [] for i in range(1,n+1): heapq.heappush(q,(i*1,i,1)) for _ in r..

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..

2022. 9. 14. 02:56

이진 탐색 정복기3 -심화 응용 lower bound, upper bound-

1. 문제 https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 주어진 수열에서 특정한 수들이 몇개나 있는지 찾는 문제 2. lower bound와 upper bound 지금까지 배웠던 이진탐색 알고리즘은 특정한 수가 존재하는지, 존재하지 않는지만 알아보는 알고리즘이다. 하지만 수열에서 특정한 수가 여러개 존재할 수도 있는데 그럴때 이진탐색으로 몇개나 존재하는지 알 수 있을까 만약 특정한 수가 가장 먼저 나오기 시작..

2022. 9. 10. 04:05

이진 탐색 정복기2 - 이진 탐색이란..-

1. 이진 탐색(binary search) 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘 데이터가 무작위일 때는 사용할 수 없지만, 이미 정렬되어 있다면 매우 빠르게 데이터를 찾을 수 있다는 특징이 있다 범위를 절반씩 좁혀가며 데이터를 탐색하는 특징이 있다 위치를 나타내는 변수 3개를 사용하는데 탐색하고자 하는 범위의 시작점, 끝점, 그리고 중간점이다. 찾으려는 데이터와 중간점 위치의 데이터를 반복적으로 비교하여 원하는 데이터를 찾는게 이진 탐색이다. 이미 10개의 정렬된 데이터에서 값이 4인 원소를 찾는 예시를 살펴보자 1) 먼저 시작점과 끝점을 확인하고 둘 사이에 중간점을 정한다 시작점은 0, 끝점은 9이고 중간점은 4.5인데 중간점이 실수면 소수점 이하를 버린다 그래서 중간점은 4..

2022. 9. 8. 03:36

이진 탐색 정복기1 -기본 이론 순차 탐색?-

리스트 내에서 데이터를 매우 빠르게 탐색하는 알고리즘에 대하여 1. 순차 탐색 가장 기본적인 탐색 방법 n개의 데이터가 있을 때, 데이터를 차례대로 하나씩 확인하여 어떠한 처리를 해준 그 자체가 바로 순차 탐색이다. 순차 탐색(sequential search)이란 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례대로 확인하는 방법 정렬되지 않은 리스트에서 데이터를 찾아야할때 리스트 내에 데이터가 아무리 많아도 시간만 충분하다면 항상 원하는 원소를 찾을 수 있다 2. 순차 탐색으로 'IU'를 찾는 과정 1) 먼저 첫번째 데이터 'Daehyuck'는 찾고자 하는 문자열 'IU'와는 다르다. 따라서 다음 데이터로 이동 2) 두번째 데이터 'Taeyeon'은 찾고자 하는 'IU'와는 ..