목록전체 글 (83)
천천히 빛나는
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/TN2cx/btsuZ2A0l7L/zMKbJxegYM0bBTp8EFGD10/img.png)
리스트 (List) List는 배열과 비교하여 이와 같은 모습을 띄고 있다. 실제 값이 저장되는 데이터 필드과 주소가 저장된 링크 필드로 구현되어 있다. 리스트는 삽입, 삭제, 탐색에서 뚜렷한 차이를 보인다. 배열을 생각해보면 값을 삭제하려면 뒤에 있던 값들을 이동시켜야 한다. 하지만 리스트는 주소만 바꿔주면 된다. https://velog.io/@kon6443/Data-Structure-C-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-Linked-list [Data Structure] C++ / 자료구조 / Linked list 링크드 리스트란 배열과 비슷하게 선형적으로 연결된 자료구조이다.하지만 인접한 메모리 공간에 저장되는 배열과 다르게 링크드 리스트는 인접한 메모리 공간에 저..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/yHe1C/btsudOYta4l/hhKWB66qDCTkgoAh9GEeBK/img.png)
스택 : 한쪽에서만 자료를 빼고 넣을 수 있다. 큐 : Front 에는 삭제가, Back 에서는 삽입이 일어난다. 덱 (Deque) 덱(deque)은 양쪽에서 삽입과 삭제가 가능하며 스택(stack)과 큐(queue)의 연산을 모두 지원한다. Double-Ended Queue라는 뜻으로 front, rear에서 모두 삽입 삭제가 가능한 큐를 생각하면 된다. enqueue : 덱에서 요소를 추가 dequeue : 덱에서 요소를 삭제 front : 덱의 맨 앞 rear : 덱의 맨 뒤 큐와 같은 용어를 쓴다. 하지만 enqueue와 dequeue가 앞과 뒤 모두에서 일어난다는 것을 잊지밀자! class Deque { private: int front; // front에 가까운 원소의 바로 앞 int rear..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/D71Wk/btsuG7VBPY3/ceD6QTyoomIrBBnfNLxIZ0/img.png)
큐 (Queue) 큐(queue)는 스택(stack)과 다르게 FIFO(First In First Out-선입선출)의 구조를 가지고 있다. 편의점 아르바이트를 해보신 분들은 특히 잘 아시겠지만 가장 먼저 들어온 것을 가장 앞에 배치하여 가장 먼저 나갈 수 있도록 하는 것이다. 은행의 번호표를 생각해보자. 100번째 번호표를 뽑은 상태이고 현재 손님이 많이 몰린 탓이 96번째 손님까지 서비스를 받고 있다. 그렇다면 다음 손님의 번호와 새로온 손님의 번호를 기억하기 위해서는 어떻게 해야할까? 바로 큐를 이용하면 된다. Enqueue : 큐 맨 뒤에 요소 추가 Dequeue : 큐 맨 앞에 요소 삭제 Peek : front에 위치한 데이터 (가장 일찍 들어온 요소) Front : 맨 앞의 위치 Rear : 맨..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/F126k/btsuegtsIPa/bfljkiqnjGWyUTlvUYxjZ1/img.png)
스택 (Stack) 스택(stack)은 쌓아놓은 더미라는 의미 그대로, 책상에 쌓여있는 책을 생각하면 된다. 가장 큰 특징은 LIFO(Last In First Out-후입선출)이다. 제일 최근에 들어온 데이터가 가장 먼저 나가는 것이다. 편의점 아르바이트를 해보신 분들이 아는 선입선출과 반대되는 용어이다. 여기서 선입선출에 해당되는 자료구조는, 뒤에서 다룰 큐 (Queue)이다. 문서 편집기에서 되돌리기를 했을 때 바로 직전에 실행한 작업이 취소되는 것을 생각하면 된다. push : 스택의 top에서 데이터 삽입 pop : 스택의 top에서 데이터 삭제 stack top : 스택에서 입출력이 이루어지는 부분 element : 스택에 저장되는 것 full stack : 포화 상태의 스택 스택의 기본 용어는..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nHnLf/btsuh46hUgy/b9W9DFpGVnlmjkbx8XhNIK/img.png)
2750. N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector num(n); for (int i = 0; i > num[i]; } sort(num.begin(), num.end()); for (int i = 0; i < n; i++) { cout key; j--) { list[j + 1] = list[j]; } list[j + 1] = key; } } int main() { ios::sync_with_stdio(false); c..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/TWgq2/btstxPC202Q/1VxKgw2I91vYccMLSYEaU0/img.gif)
정렬 알고리즘이란? 불규칙한 데이터들을 정렬해야 할 때, 상황에 맞는 알고리즘을 사용하여 문제를 해결할 수 있다. 예를 들어, 특정 숫자를 찾아야 할 때 정렬된 데이터들 속에서 찾는 것과 정렬되지 않은 데이터들에서 찾는 것은 차이가 발생한다. (이진탐색을 사용할 수 있고 없고가 결정됨) 정렬 알고리즘들을 비교하기 위해 Big O 표기법을 사용하여 시간복잡도를 나타낼 것이므로 시간복잡도에 대한 지식이 아예 없다면 아래 짧은 포스팅을 읽고 오는 것을 추천한다. https://shine-slowly.tistory.com/33 알고리즘: 시간 복잡도란 본격적으로 시간복잡도 문제를 풀기 전에, 시간 복잡도에 대해 설명하도록 하겠다. 이 설명은 시간복잡도를 들어는 봤으나 정확히 개념을 모르겠거나 까먹은 전공자들이 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c3MKwl/btstsZTYs2v/DitWepTduNVMhibIJVU1QK/img.png)
https://shine-slowly.tistory.com/35 알고리즘 : 브루트 포스란 브루트 포스(Brute Force)란? Brute : 무식한 + Force : 힘 가능한 모든 경우의 수를 탐색하면서 요구조건에 충족하는 결과를 가져온다 전체를 탐색하기 때문에 전체 탐색, 완전 탐색이라고도 한다. 브루 shine-slowly.tistory.com 브루트 포스에 대한 개념이 아예 없다면 위 포스팅을 간단하게 읽고 오는 것을 추천한다. 2798. 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bHXz15/btstvOLFSVn/6474MOpK8wlag88Y6F3nb0/img.png)
브루트 포스(Brute Force)란? Brute : 무식한 + Force : 힘 가능한 모든 경우의 수를 탐색하면서 요구조건에 충족하는 결과를 가져온다 전체를 탐색하기 때문에 전체 탐색, 완전 탐색이라고도 한다. 브루트 포스 알고리즘은 해가 하나 이상 존재한다는 가정 하에 모든 범위를 탐색하므로 100% 정답을 찾을 수 있다 알고리즘을 설계하고 구현하는 것이 매우 쉽지만 실행 시간이 매우 오래 걸리며 메모리 측면에서 비효율적이다. 브루트 포스는 선형 구조와 비선형 구조로 나뉜다 - 선형 구조 : 순차 탬색 - 비선형 구조 : 너비 우선 탐색 (BFS), 깊이 우선 탐색 (DFS), 백트래킹 브루트 포스 예시 1. 5자리 비밀번호 자물쇠를 00000부터 99999까지 대입해서 자물쇠를 풀 수 있다. 2...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/L3oI6/btstCVPD79Y/vGOvksFwVUh1WViITFWRKK/img.png)
https://shine-slowly.tistory.com/33 알고리즘: 시간 복잡도란 본격적으로 시간복잡도 문제를 풀기 전에, 시간 복잡도에 대해 설명하도록 하겠다. 이 설명은 시간복잡도를 들어는 봤으나 정확히 개념을 모르겠거나 까먹은 전공자들이 읽어야 이해가 될 것이 shine-slowly.tistory.com 시간 복잡도를 잘 모르신다면 이 포스팅을 읽는 것을 추천드립니다. 24262. 오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. #include using namespace std; int main() { int n; cin >> n; cout
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bfuzxV/btstr2uLYSH/XRI8HZwoFV0p3EGeybrfl1/img.png)
본격적으로 시간복잡도 문제를 풀기 전에, 시간 복잡도에 대해 설명하도록 하겠다. 이 설명은 시간복잡도를 들어는 봤으나 정확히 개념을 모르겠거나 까먹은 전공자들이 읽어야 이해가 될 것이다. 시간 복잡도란? 코드를 실행해보기 전에 반복문, 입력값 등을 통해서 실행시간이 얼마나 걸릴지 추측할 수 있는 척도 보통 Big-O 표기법으로 최악의 상황일 때 걸리는 시간을 이용해서 나타낸다. x축은 자료의 수, y축은 걸리는 시간이다. 즉 빨간 부분에 있을 수록 수행 시간이 굉장히 오래 걸리는 알고리즘이다 1) O(1) cout