끄적끄적 코딩
article thumbnail
[C++] 백준 1021번 회전하는 큐
알고리즘 2019. 9. 8. 03:53

덱 문제입니다. 원형 큐에서 M개의 수를 빼낼때 최소 걸리는 횟수를 구하는 문제입니다. 좌, 우로 움직일 수 있으며 front를 뺄때는 횟수가 증가하지 않습니다. 1. 덱에 1~N까지의 값을 넣습니다. 2. 찾아야하는 숫자의 인덱스 번호를 확인합니다. 3. 인덱스 번호를 통해 왼쪽으로 가는 경우와 오른쪽으로 가는 경우에 대해서 빠른 경로를 찾습니다. 4. 빠른 방향으로 이동하면서 횟수만큼 카운트를 증가합니다. 5. 찾은 수를 pop시킵니다. 6. 찾는 수들을 다 찾을 때 까지 2~5를 반복합니다. #include #include #include #include #include using namespace std; int main(int argc, char *argv[]) { int n; int find;..

article thumbnail
[C++] 백준 10866번 덱
알고리즘 2019. 9. 8. 01:30

덱 문제입니다. 덱에 대한 함수를 만들어서 그에 대한 결과값을 출력해주면 됩니다. #include #include #include #include using namespace std; deque d; void push_front_(int x) { d.push_front(x); } void push_back_(int x) { d.push_back(x); } int pop_front_() { if (d.empty()) { return -1; } else { int num = d.front(); d.pop_front(); return num; } } int pop_back_() { if (d.empty()) { return -1; } else { int num = d.back(); d.pop_back(); r..

article thumbnail
[C++] 백준 1966번 프린터 큐
알고리즘 2019. 9. 8. 01:16

큐 문제입니다. 우선순위가 있는 수열에서 큐에 넣었을때 m번째 수는 몇번째에 출력되는지 찾아야 합니다. 값들을 priority_queue에 넣고 일반 queue에는 값과 인덱스 번호를 넣습니다. 우선순위 큐의 가장 위에 값과 같을 때 까지 큐를 계속 돌립니다. 같아지면 우선순위 큐의 가장위를 pop하고 다시 반복합니다. 최종적으로 찾는 인덱스가 나오면 count를 출력합니다. count는 우선순위 큐를 pop할 때마다 세어주면 됩니다. #include #include #include using namespace std; int main(int argc, char *argv[]) { int ts; int n, m; int c; int num; int here; scanf("%d", &ts); while (..

article thumbnail
[C++] 백준 11866번 조세퍼스 문제 0
알고리즘 2019. 9. 8. 00:23

원형 큐 문제입니다. 큐에 값을 전부 넣고 K - 1까지의 값을 맨뒤로 넣습니다. 그렇게 되면 K번째의 수를 찾을 수 있고 K번째 수를 pop해줍니다. 이를 반복합니다. #include #include using namespace std; int main(int argc, char *argv[]) { int N, K; queue q; cin >> N >> K; for (int i = 1; N >= i; i++) { q.push(i); } cout

article thumbnail
[C++] 백준 10845번 큐
알고리즘 2019. 9. 7. 23:33

큐 문제입니다. 다음을 실행했을 때에 대한 결과값을 출력합니다. push pop size empty front back #include #include #include #include #include using namespace std; queue q; void push(int x) { q.push(x); } int pop() { if (q.empty()) { return -1; } int x = q.front(); q.pop(); return x; } int size() { return q.size(); } int empty() { if (q.empty()) { return 1; } else { return 0; } } int front() { if (q.empty()) { return -1; } el..

article thumbnail
[C++] 백준 17298번 오큰수
알고리즘 2019. 9. 5. 21:49

스택 문제입니다. A의 수열이 있을 때 Ai의 오른쪽에는 경우 Ai+1 ~ Ai+n가 있습니다. Ai+1 ~ Ai+n에서 Ai와 가장 가까운 Ai보다 큰 수를 구하면 됩니다. 없을 시에 -1을 출력합니다. vecot v에는 입력 받은 값을 수열을 넣습니다. vector ans에는 기본값 -1을 넣고 각 수열에 대한 오큰수의 값을 가집니다. stack s에는 v[i]에 대한 i의 index를 넣습니다. stack에는 오큰수를 확인 하지 못한 값들의 인덱스가 쌓이게 됩니다. 그리고 i를 증가하면서 stack에 쌓인 값들과 비교를 하면서 만약 v[i]가 더 크면 오큰수를 v[i]로 설정합니다. 이에 대한 값 설정은 ans배열에 넣습니다. #include #include #include #include #inc..

article thumbnail
[C++] 백준 1874번 스택 수열
알고리즘 2019. 9. 5. 03:52

스택 문제입니다. 스택의 push와 pop을 이용해서 입력된 배열의 모양을 만들 수 있는지 찾아야합니다. stack에 쌓이는 수는 1부터 n까지 차례대로 쌓입니다. (1부터 n = num) 비어있거나, top()이 현재 찾는 수와 다르면 num을 push해줍니다. top()이 찾는 수와 같으면 pop()을 해줍니다. num이 n보다 커지면 만들 수 없는 배열이 됩니다. #include #include #include #include #include using namespace std; int n; int arr[100010]; stack s; vector v; int num; int main(int argc, char *argv[]) { num = 1; scanf("%d", &n); for (int i ..

article thumbnail
[C++] 백준 4949번 균형잡힌 세상
알고리즘 2019. 9. 4. 19:41

스택 문제입니다. 1. 문자를 getline으로 줄 단위로 받습니다. 2. 각 문자를 확인하여 (, ), [, ]에 대해서 처리를 합니다. 3. (, [의 경우 stack에 push해줍니다. )은 !empty이면서 top에 (가 있으면 pop해줍니다. 아닐 시 flag = true (초기값 false) ]도 !empty이면서 top에 [가 있으면 pop해줍니다. 아닐 시 flag = true 4. 모든 문자를 확인 한 후 flag가 true거나, !empty()면 no를 출력 아닐 시 yes를 출력 #include #include #include #include #include using namespace std; int main(int argc, char *argv[]) { bool flag; stri..

검색 태그