알고리즘

· Algorithm
문제널리 잘 알려진 자료구조 중 최대 힙이 있다. 최대 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오.배열에 자연수 x를 넣는다.배열에서 가장 큰 값을 출력하고, 그 값을 배열에서 제거한다.프로그램은 처음에 비어있는 배열에서 시작하게 된다.입력첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 가장 큰 값을 출력하고 그 값을 배열에서 제거하는 경우이다. 입력되는 자연수는 231보다 작다.출력입력에서 0이 주어진 횟수만큼 답을 출력한다. 만약 배열이 비어 있는 경우인데 가장 큰 값을 출력하라고 한 경우에는 0을 ..
· Algorithm
투 포인터(Two Pointers) 알고리즘은 정렬된 배열에서 효율적으로 특정 조건을 만족하는 값을 찾거나, 구간을 탐색하기 위해 사용되는 알고리즘입니다. 두 개의 포인터를 배열의 양 끝에 배치하거나 특정 위치에서 시작해, 이를 이동시키며 조건을 만족하는 값을 찾습니다. 정렬된 배열에서 가장 많이 사용됩니다.두 포인터를 사용하여 한 번의 탐색으로 문제를 해결하므로 시간 복잡도는 보통 O(N)입니다.이분 탐색처럼 중간 값을 탐색하지 않고, 포인터를 이동시켜 범위를 좁혀 나가는 방식입니다.투 포인터의 동작 원리배열의 양 끝에서 시작하거나, 시작 지점을 설정합니다.각 포인터의 값에 따라 조건을 확인합니다.조건에 따라 왼쪽 포인터를 오른쪽으로 이동하거나 오른쪽 포인터를 왼쪽으로 이동합니다.두 포인터가 교차하거나..
· Algorithm
배열의 중간 요소를 반복적으로 확인하며 탐색 범위를 절반으로 줄여나갑니다. 시간 복잡도는 아래와 같습니다.작동 원리정렬된 데이터: 이분 탐색은 반드시 정렬된 데이터에서만 동작합니다.중간 값 선택: 배열의 중간 값을 선택합니다.조건 비교:찾는 값이 중간 값보다 작으면 왼쪽 절반을 탐색합니다.찾는 값이 중간 값보다 크면 오른쪽 절반을 탐색합니다.찾는 값이 중간 값과 같으면 탐색을 종료합니다.반복: 값을 찾거나 범위가 비워질 때까지 반복합니다.fun binarySearch(array: IntArray, target: Int): Int { var low = 0 var high = array.size - 1 while (low return mid // 값을 찾은 경우 arra..
· Algorithm
복습하는 겸, 데이터 구조의 두 가지 종류인 선형과 비선형에 대해 정리를 진행 보겠습니다. 선형 구조- 데이터가 연속적이고 순차적으로 배치되는 구조입니다.- 각 요소는 하나의 선형 순서로 정렬되어 있으며, 각 요소는 이전 요소와 다음 요소와의 관계를 가집니다.- 종류에는 배열, 연결 리스트, 스택, 큐가 존재합니다.- 연속성 : 메모리에서 연속된 위치에 데이터가 저장됩니다 (특히 배열의 경우)- 접근 방식 : 각 요소는 단 하나의 직접 앞선 요소와 단 하나의 직접 뒤따른 요소를 가집니다.  - 탐색 시간 : 특정 요소에 대한 접근 시간은 구조에 따라 다릅니다. 예를 들어, 배열은 O(1)로 접근할 수 있지만, 연결 리스트는 O(n)이 걸릴 수 있습니다.- 연결 리스트의 경우에는 동적 할당을 통해 메모리 ..