본문 바로가기
728x90

프로그래밍/자료구조 및 알고리즘7

백준 2559 수열 풀이 문제 링크성능 요약메모리: 3568 KB, 시간: 968 ms분류누적 합, 슬라이딩 윈도우, 두 포인터제출 일자2025년 2월 18일 10:43:25문제 설명매일 아침 9시에 학교에서 측정한 온도가 어떤 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 가장 큰 값을 알아보고자 한다.예를 들어, 아래와 같이 10일 간의 온도가 주어졌을 때,3 -2 -4 -9 0 3 7 13 8 -3모든 연속적인 이틀간의 온도의 합은 아래와 같다.이때, 온도의 합이 가장 큰 값은 21이다.또 다른 예로 위와 같은 온도가 주어졌을 때, 모든 연속적인 5일 간의 온도의 합은 아래와 같으며,이때, 온도의 합이 가장 큰 값은 31이다.매일 측정한 온도가 정수의 수열로 주어졌을 때, 연속적인 며칠 동안의 온도의 합이 .. 2025. 2. 18.
이진 탐색 이진 탐색(Binary Search)은 정렬된 리스트에서 특정한 값을 찾는 알고리즘임. 이진 탐색은 리스트의 중간 값을 기준으로 탐색 범위를 반씩 줄여가며 값을 찾아나감 이진 탐색의 동작 방식! 리스트의 중간 위치를 찾습니다. 중간 위치의 값과 찾고자 하는 값이 일치하면 탐색을 종료합니다. 중간 위치의 값이 찾고자 하는 값보다 크면, 중간 위치의 왼쪽 부분 리스트에서 탐색을 계속합니다. 중간 위치의 값이 찾고자 하는 값보다 작으면, 중간 위치의 오른쪽 부분 리스트에서 탐색을 계속합니다. 리스트에서 찾고자 하는 값이 없으면 탐색을 종료합니다. 이진 탐색은 탐색 범위가 매우 큰 리스트에서도 빠른 속도로 값을 찾을 수 있음 탐색 범위를 반씩 줄여가며 탐색하기 때문에 최대 log2(N)번의 비교 연산이 필요함... 2023. 3. 12.
힙 트리 이론 이진트리란 ? 각 노드가 최대 두개의 자식 노드를 가지는 트리 이진 검색 트리 특징 왼쪽을 타고 가면 현재 값보다 작다 오른쪽을 타고 가면 현재 값보다 크다 이진 검색 트리 문제 그냥 무식하게 추가하면, 한쪽으로 기울어져서 균형이 깨진다 트리 재배치를 통해 균형을 유지하는것이 과제(AVL, Red-Black) 힙 트리 특징 [부모 노드]가 가진 값은 항상 [자식 노드]가 가진 값보다 크다 이진트리에 비해 조건이 까다롭지 않다 노드 개수를 알면 트리 구조는 무조건 확정할 수 있다. 힙 트리 구조 마지막 레벨을 제외한 모든 레벨에 노드가 꽉 차있다(완전 이진 트리) 마지막 레벨에 노드가 있을 때는, 항상 왼쪽부터 순서대로 채워야한다. 배열을 이용해서 힙 구조를 바로 표현할 수 있다. i번 노드의 왼쪽자식은[.. 2023. 3. 12.
큐(Queeu) Queue(FiFO First In Fisrt Out 선입 선출) 예를들어 대기열 등 #include 필요 queue 구현해보자 #include #include #include #include #include using namespace std; template class ArrayQueue { public: ArrayQueue() { _container.resize(100); } void push(const T& value) { //다 찼는지 체크 if (_size == _container.size()) { //증설작업 int newSize = max(1, _size * 2); vector newData; newData.resize(newSize); //데이터 복사 for (int i = 0; i < .. 2023. 3. 7.
스택(Stack) Stack(LIFO Last In First Out) 후입선출 되돌리기 기능 등 1번,2번,3번 차가 막다른길에 도착했다고 하면 3번, 2번, 1번 순으로 나가는것이라고 생각하면 편하다. 스택 기능을 구현해보자 #include #include #include #include using namespace std; template//기본상태 vector class Stack { public: void push(const T& value) { _container.push_back(value); } void pop() { _container.pop_back(); } T& top() { return _container.back(); } bool empty() { return _container.empty(); }.. 2023. 3. 7.
배열, 동적배열, 연결리스트 배열 사용할 방 개수를 고정해서 계약하고 (절대 변경 불가) 연속된 방으로 배정 받아 사용 장점 : 연속된 방 단점 : 방을 추가/ 축소 불가 동적배열: 사용할 방 개수를 유동적으로 계약 연속된 방으로 배정받아 사용 문제점: 이사 비용은 어떻게? 동적배열 할당 정책: 실제로 사용할 방보다 많이, 여유분을 두고(대략 1.5~2배) 예약 이사 횟수를 초기화 장점: 유동적인 방 계약(방 여유분 추가 예약으로 이사 횟수 초기화) 단점 : 중간 삽입/삭제 연결리스트: 연속되지 않은 방을 사용 장점: 중간 삽입/삭제 이점 단점 :N 번째 방을 바로 찾을수가 없음(Random Access 불가) 2023. 3. 6.
728x90