덱은 양방향에서 입력과 출력이 모두 가능한 자료구조입니다. 양방향의 입출력으로 인해 환형의 형태를 가진다는 점을 주의하며 이전의 큐 문제와 비슷하게 코드를 작성를 하여야 합니다. 2021.07.08 - [알고리즘/문제풀이] - [BOJ 18528번]큐 2 [BOJ 18528번]큐 2 큐 2 문제는 자료구조 큐를 활용하여 해결할 수 있는 문제이다. 자료구조 큐에 대한 학습을 하였다면 어려움없이 무난하게 풀 수 있는 문제이다. 큐에 대한 내용은 다음 링크에 확인할 수 있다. 2 ark-hive.tistory.com 작성한 코드는 다음과 같습니다. #include #define size1 20020 int N; int temp; int x; int deque[size1]; int front; int back=..
프린터 큐는 큐를 활용해서 푸는 문제이다. 다만 단순히 큐만을 사용하는 문제는 아니었다. 큐에 있는 원소의 우선순위 중 가장 높은 수를 알아야 하는 데 이때 구글링을 해보면 우선순위 큐를 사용하는 유저들이 많았다. 아직 우선순위 큐에 대해 다루지 않았기 때문에 이번 풀이에서는 계수를 이용해서 문제를 풀었다. 해당 우선순위를 가지는 값의 개수를 저장하는 배열을 선언하고, 이 배열을 조사함으로써 현재 큐에서 우선순위가 가장 큰 경우를 찾고 그 값에 따라 큐에서 pop을 한 값을 다시 push할지 하지 않을 지 결정하는 식으로 해결하였다. 관찰한 값을 표시하기 위해 flag 변수가 필요했고, 구조체를 활용하여 flag와 우선순위 값을 묶고, 구조체를 원소로 하는 배열을 선언하였다. 다른 풀이에서는 구조체가 아..
요세푸스 문제 0은 큐를 활용하여 풀 수 있는 문제이다. 사람들이 큐에서 K-1번 쉬프트 로테이션을 한 후 pop을 하여 사람의 번호를 추출함으로써 해결할 수 있다. 작성한 코드는 다음과 같다. #include #define size 2000 //http://ark-hive.tistory.com/ //사람들이 큐에서 쉬프트로테이션을 하면 어떻게 될까? int N, K; int queue[size]; int head, tail; int pop() { head += 1; head %= size; return queue[(head +size - 1)%size]; } void push(int x) { queue[tail] = x; tail += 1; tail %= size; } int main(void) { s..
카드 2 문제는 큐를 활용하는 문제이다. 카드 덱의 위쪽은 head, 카드 덱의 아래쪽을 tail로 생각하면 간단하게 해결할 수 있다. 카드를 바닥에 버리는 것은 pop을 하는 것으로, 위쪽의 카드를 아래쪽으로 넣는 것을 pop 후 push로 생각할 수 있다. 이러한 과정을 카드가 1장이 남을 때까지 반복하여 마지막에 큐에 남은 원소를 출력하면 된다. 작성한 코드는 다음과 같다. #include #define size 1000000 //http://ark-hive.tistory.com int N; int queue[size]; int head, tail; int pop() { head += 1; head %= size; return queue[(head+size- 1)%size]; } void push(..
큐 2 문제는 자료구조 큐를 활용하여 해결할 수 있는 문제이다. 자료구조 큐에 대한 학습을 하였다면 어려움없이 무난하게 풀 수 있는 문제이다. 큐에 대한 내용은 다음 링크에 확인할 수 있다. 2021.07.07 - [알고리즘/이론] - [알고리즘/이론]큐 [알고리즘/이론]큐 원소를 삽입할 때 Enqueue, 원소를 제거할 때 Dequeue를 한다. 큐는 FIFO(first in, first out, 선입선출)의 특성을 같는다. 큐는 머리(head)와 꼬리(tail)을 갖는 데, 원소는 꼬리로 삽입되고 머리에서 제거된다 ark-hive.tistory.com 구현할 때 주의할 점은 getchar 함수를 사용할 때 다음과 같이 괄호를 써주어야 한다는 점이다. 연산자의 우선순위규칙 때문에 비교연산이 우선 수행된..
오큰수 문제는 스택을 활용하여 풀 수 있는 문제이다. 입력의 수가 1000,000이기 때문에 O(N^2)의 알고리즘으로는 풀 수가 없다. 스택을 활용하면 O(N)으로 풀 수 있게 된다. 아이디어는 다음과 같다. 수열을 순차적으로 탐색하면 어떤 수의 다음 수로 작거나 같은 수가 올 수 있고 혹은 큰 수가 올 수 있다. 작은 수가 오게 된다면 그것은 어떤 수의 오큰수가 되지 못하기 때문에 어떤 수의 오큰수를 바로 결정하지 못하고 다음에 결정할 수 있도록 어떤 수를 저장해야 한다. 큰 수가 온다면 그것은 오큰수가 될 수 있기에 어떤 수의 오큰수를 결정한 후 이전에 저장한 오큰수를 결정하지 못한 다른 수들에 대해 판단을 하여야 한다. 가만히 살펴보면 저장되는 수는 내림차순으로 저장되며 오큰수를 판별할 때는 오름..
스택 수열 문제는 스택으로 입력으로 주어지는 수열을 만들 수 있는지 확인하며 그렇다면 push, pop의 순서를 출력하는 문제이다. 이 문제를 풀기 위해 스택을 선언하였으며, 문제에서 주어진 입력을 단서로 삼아 push, pop의 사용 여부를 조사하였다. n까지의 자연수가 오름차순으로 스택으로 입력되므로 스택에 입력된 숫자의 가장 큰 값이 입력으로 받아진 숫자보다 작다면 스택에 push를 한 후 pop을 하고, 크다면 기존에 스택에서 pop을 하여 입력된 숫자를 출력하는 지 확인해야 한다. 즉 어느 시점에서 스택을 활용하여 숫자를 출력하기 위해서는 다음과 같은 두 가지 방법 중 하나를 선택해야 한다는 사실을 이용해야 한다. 1. 오름차순으로 정렬된 순열의 숫자를 차례로 스택에 push한 후 1개의 숫자를..
- Total
- Today
- Yesterday
- 큐
- gem5
- 완전탐색
- 정렬
- 건이의 특제 떡국 끓이기
- C언어
- Git
- 재귀함수
- backtracking
- 구조체
- 메이플스토리
- 스택
- 애니메이션
- 영화
- 백준
- 영어 어휘
- Push
- BOJ
- 이진탐색
- 구현
- 이분법
- recursive
- 베릴로그
- 취미
- 알고리즘
- Verilog
- BFS
- 너비우선탐색
- 백트래킹
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |