Algorithm 170

[백준 알고리즘/C++/큐] 2164 카드2

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다 우선, 제일 위에 있는 카드를 바닥에 버린다 그다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다 N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 문제 큐로 아주 간단하게 풀 수 있다 1. front를 pop 2. front를 back에 복붙(?)하고 pop 1, 2를 queue.size()가 1이 될 때까지 반복하면 된다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include #in..

Algorithm/BOJ 2021.04.25

[백준 알고리즘/C++/스택] 17298 오큰수

Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다 (없으면 -1) A = [3, 5, 2, 7]인 경우 오큰수는 차례대로 5, 7, 7, -1이 된다 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 출력하는 문제 A = [9, 5, 4, 8]인 경우 오큰수는 -1, 8, 8, -1이 된다 수가 최대 100만개 입력될 수 있으므로 비효율적으로 짜선 안된다 생각의 흐름.. 아이디어 1. 계속 백만개의 수를 뒤지지 않으려면 범위를 좁혀야한다 2. Ai 기준으로 봤을 때 오큰수만 남기고 계속 지워가며 계산하면 빠르지 않을까 3. 정방향으로 계산하면 답도 없구나 역방향으로 하자 4. (A = [9, 5, 4, 8] 기준) 8은 stack이 비어있으니 패스, res 변수에..

Algorithm/BOJ 2021.04.24

[백준 알고리즘/C++/스택] 1874 스택 수열

문제 해석이 문제인 문제^^.. 1부터 n까지의 수를 적절히 push, pop 하여 입력값과 같은 수열을 만들 수 있는지 체크하는 문제 만약 된다면 push는 +, pop은 -로 표현하여 출력하고 안되면 NO를 출력한다 stack.empty()가 true면 push, false면 stack.top()이 입력값과 같은지 체크한다 같지 않으면 같아질 때 까지 +1 해가며 push하고 같아지면 pop 해주면 됨 push, pop 할 때 +, -를 string으로 이어붙여서 마지막에 하나씩 출력하면 된다 마지막에 스택이 비어있지 않다면 NO를 출력한다! 123456789101112131415161718192021222324252627282930313233343536373839404142#include #incl..

Algorithm/BOJ 2021.04.24

[백준 알고리즘/C++/스택] 4949 균형잡힌 세상

세계의 균형을 체크하는 문제다.. 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어진 문자열에서 괄호 두 종류를 구분해야 한다 괄호를 닫을 때 stack.empty(), stack.top()을 체크해주면 된다 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); string str; while (true) { getline(cin,..

Algorithm/BOJ 2021.04.24