본문 바로가기

알고리즘19

6. STL 사용하기 - std::list STL 이란? C++ 에서 제공하는 STandard Library를 STL이라고 한다. 자바에서는 자바에서 제공하는 API라고 볼 수 있다. 지금까지 list에 대해 직접 설계해보았고 list에 대한 설명이 충분했다. 이번에는 STL을 직접 사용하면서 어떤 기능이 있고 언제, 어떻게 사용할 지 생각해보도록 하자. ※ 시간이 오래 걸리는 Method는 제외한다. (효율적 사용) std::list Construct Method Description (constuctor) 리스트 생성시 입력 값 operator= = 기호에 대한 연산 방법 Iterators Method Description begin() 리스트 Head에 속한 데이터 위치 end() 리스트 마지막 위치 != Tail, null 값 rbegin.. 2024. 2. 11.
5. 원형 연결 리스트 (Circular Linked List) 원형 연결 리스트란? 단순 연결 리스트에서 끝이 처음과 연결되어 있는 형태를 원형 연결 리스트라고 합니다. STL에도 구현되어있지 않고 아직 학생 수준이지만, 실제로 사용되는 경우도 본 적이 많이 없습니다. 그래서 단순하게만 만들어보도록 할 것인데, 이중 연결 리스트 형태로 만들려고 합니다. (실제로 순환적인 요소는 큐 또는 재귀를 많이 사용하는듯) 원형 연결 리스트(Circular Linked List) 구현하기 많은 기능을 추가하지는 않겠습니다. 노드 #pragma once template class Node { public: Node(T data); T getData() const; Node* getNext() const; Node* getPrev() const; void setNext(Node* .. 2024. 2. 10.
9. 반복문 - while 문, do while 문 while 문 이란? while문도 for문과 마찬가지로 ~동안 이라는 뜻을 가지고 있는 반복문입니다. 이전 포스트에서 for문에서 ~동안을 의미하는 곳이 조건식이라고 설명했습니다. while문도 마찬가지로 '조건식' 동안 반복을 하겠다는 의미가 됩니다. 조금 더 자세히 알기 위해서 for문의 수행 과정을 복습해보겠습니다. 첫 번째 수행 (초기값), 먼저, '초기값'에 들어가는 내용은 0개 이상 작성하면 됩니다. 초기값을 설정하지 않아도 수행되는 것이죠. 저는 3개의 변수 i, j, cnt를 초기값으로 특정 값을 할당 했습니다. 두 번째 수행 (조건식), 조건동안 for문을 수행할 수 있는지 확인합니다. 조건은 i < j 이므로, (i : 10) < (j : 20) 를 만족합니다. 두 번째 수행에서 조건.. 2024. 2. 10.
8. 반복문 - for 문 반복문이란? 프로그래밍 언어에서 반복문이란 말 그대로 반복하는 과정을 수행할 수 있는 문법을 뜻한다.반복문에는 잘 알려진 for문과 while문이 존재한다.추가로 do while문도 존재하는데 아직 까지는 특별한 경우를 제외하고는 사용을 하지 않았다. for문 for문은 기본적인 문법으로 대부분의 사람이 잘 알고 있다.하지만, 생각보다 헷갈려하는 포인트들이 있어서 그것을 짚기 위해서 가져왔다. 우선, 웬만한 책에서 설명하는 for문의 기본 구성은 아래와 같다.for (int i = 0; i  대부분 여기서 int i = 0 을 초기값, i for (초기값; 조건식; 증감식)근데 저는 헷갈리던 부분이 좀 있었습니다.맨 처음 for문을 접했을 때, 조건식이 ' i ' 이면 i 인가? 라는 생각 때문에 조금.. 2024. 2. 10.
4. STL 따라잡기 - 이중 연결 리스트 (Doubly Linked List) 구현 이중 연결 리스트란 ? 여기서 연결 리스트에 대한 개념을 알게 되었고 여기서 단순 연결 리스트를 구현해보았다. 또, 앞선 포스팅에서 연결에 대한 방법을 말했는데 '이중 연결 리스트' 는 양방향(이중)으로 구성된 자료구조이다. 즉, 싱글 연결 리스트는 코스 여행이라면 이중 연결 리스트는 자유 여행이다. 이에 대해선 내가 생각한 예시이기 때문에 한 번 생각해보고 비슷한 예시를 찾아서 본인만의 개념으로 이해하길.. 이번 STL 따라잡기 포스트는 standard library인 list를 만들어보겠다. 먼저, list에 어떤 기능이 있는지 한 번 알아보자. 우리는 STL list에 어떤 기능이 구현되어있는지 파악한 뒤에 이를 정리할 것이다. 깃허브 이슈에 구현할 내용을 작성하고 이를 바탕으로 레파지토리에 저장할.. 2024. 2. 7.
3. STL 따라잡기 - 단순 연결 리스트 (Singly Linked List) 구현 단순 연결 리스트란 ? 이전 2. Linked List (연결 리스트) 포스트에서 설명된 내용을 기반으로 설명하겠습니다. 연결리스트는 데이터 간에 '연결'되어 있다고 했는데, 연결은 아래와 같이 두 가지 방법이 있다. A 에서 B로 갈 때(단방향), A ㅡ> B 또는 B ㅡ> A A 에서 B로 가고 B에서도 A로 갈 수 있을 때(양방향), A B 또는 A ㅡ B 단순 연결리스트는 이 중, 단방향에 대한 정보를 사용하는 것이 단순 연결리스트이다. 대신, 주의할 점이 있다. A가 시작점, B가 종점인 경우에는 B에서 A로 갈 수 없다. 즉, 순환이 발생하지 않는다는 점이다. A ㅡ> B ㅡ> A ㅡ > B ( X ) A ㅡ> B ㅡ> 끝 ( O ) 단순 연결리스트는 이게 끝이다. 그럼, 주로 어떻게 사용되고.. 2024. 2. 4.
2. 연결 리스트 (Linked List) 연결 리스트란 ? 먼저, List를 생각하면 쭉 ~ 나열되어 있는 것이 떠오르시나요? 연결 리스트는 말 그대로 쭉 ~ 나열되어 있는 것입니다. 하지만 데이터를 서로 연결하고 있는 것이죠. 어? 쭉 ~ 나열되어있고 연결되어있는 것은 '배열' 아닌가요? 맞습니다. 자료구조의 기본이자 데이터가 순차적으로 나열되어 있는 것은 배열입니다. 그럼 연속된 데이터를 표현하는 방법으로는 배열(Array)가 있는데 왜 Linked List를 사용하나요? 배열과 Linked List에는 엄연한 차이가 있습니다. 앞선 포스팅에서 각 자료구조는 필요에 따른 사용처가 있고, 사용자가 유동적으로 사용해야 함을 표현했습니다. 그래서 배열이라는 자료구조에 대해 알고 Linked List라는 자료구조와의 차이점을 알아야합니다. 차이점을.. 2024. 2. 4.
[이분 탐색] 이분 탐색(Binary Search) 이란 ? 이분 탐색 두 이, 나눌 분을 써서 이분인가? 정답, 이분 탐색은 두개로 나누어서 탐색하는 것이다. 예를 들어, 1부터 10까지 있다고 생각해보자. {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 우리가 8을 찾을 때, 눈으로 바로 보이니까 위치를 파악할 수 있다. 하지만 몇 번째에 있는가? 배열은 0번째부터 시작하니 7번째에 있다는 것을 알 수 있다. 컴퓨터 배열 인덱스 개념이 없는 사람들은 8번째라고 답할 것이다. 즉, O(1) 시간이다. 그럼, {1, 4, 7, 10, 12, 23, 30, 35, 100, 120} 이 있을 때, 35의 위치는? 우리는 앞에서 값을 세어가면서 몇 번째에 있는지 알 것이다. 즉, O(N) 시간이다. 100만개의 숫자가 있다면? 우리는 100만개를 일일이 세다가.. 2024. 2. 1.
백준 - [BOJ 12015] 가장 긴 증가하는 부분 수열 2 백준 온라인 져지(BOJ)에서 제공 되는 12015번 문제는 선행 문제가 있다. 가장 긴 증가하는 부분 수열 나는 위 문제를 먼저 풀어보고 오는 것을 추천한다. 해당 문제는 최장 증가 부분 수열(LIS, Longest Increasing Subsequence)로 유명한 문제이다. 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤.. 2024. 2. 1.