Stack 5

[프로그래머스] 뒤에 있는 큰 수 찾기

문제설명 알고리즘 1. 수를 stack에 입력 받는다 first는 숫자, second는 인덱스 값이 된다 2. stack이 비어있지 않다면, 맨 위의값을 꺼내어 현재 숫자와 비교하여 크거나 같으면 반복문을 빠져나가고 그렇지 않으면 stack에서 뺀다 3. 반복문을 나온 상태이면 현재 수 값과 인덱스를 저장한다 코드 #include #include #include using namespace std; vector solution(vector numbers) { vector answer(numbers.size(), -1); stack st; for(int i =0 ; i< numbers.size() ; i++){ while(!st.empty()){ pair top = st.top(); if(top.first..

Algorithm 2023.03.05

[백준 2504] 괄호의 값

괄호의 값 문제설명 첫 줄에 식을 입력 받는다. 이때 식은 (),[]로 이루어져 있다. ()는 2이고 []는 3이다. 주어진 식의 값을 알맞게 계산하여 값을 출력한다. 알고리즘 문자열을 입력받는다. 문자열을 각각 read 하고, 여는 괄호일 때는 계산의 편의를 위해서 괄호 그대로 넣지 않고 &#39;(&#39;일 때는 -1을 넣고 &#39;[&#39;일때는 -3을 넣는다 짝이 맞지 않는 경우 바로 0을 리턴하여 종료 시킨다. 닫는 괄호가 들어온 경우 stack의 맨 위값이 짝이 맞는지 확인하고 맞으면 (일 때 2를 넣고 [이면 3을 넣는다. 맨 위가 숫자이면 여는 괄호를 만날때 까지 전부 더한다. 전부 더한 뒤 다음 가장 위의 값이 짝이 맞으면 2나 3을 곱하고 그 값을 stack을 넣는다. 2-6의 과..

Algorithm 2021.07.29

[백준 6198] 옥상 정원 꾸미기

옥상 정원 꾸미기 문제설명 빌딩의 수를 입력 받고, 각 빌딩의 높이를 입력 받은 뒤, 총 관리인이 옥상정원을 확인할 수 있는 수를 출력한다. 이 때 빌딩은 오른쪽으로만 확인 가능하고, 오른쪽의 빌딩의 높이가 같거나 높으면 더이상 빌딩을 확인할 수 없다. 알고리즘 입력 값들을 입력 받는다 stack을 확인하여 비었는지, 현재 top의 크기가 새로 넣으려는 크기보다 같거나 작은지 판단한다. top의 크기가 같거나 작은 경우 오른쪽으로 볼 수 없는 경우를 의미하니까 pop하여 제거해준다. 새로운 값을 stack 에 넣는다. stack의 크기 -1만큼 정답에 더해준다. 시간초과난 코드 -> 벡터로만 풀었을 때 #include #include #include using namespace std; int main(..

Algorithm 2021.07.29

[백준 10828] 스택

스택 문제 설명 정수를 저장하는 스택을 구현하고 주어진 명령어를 처리하여 나오는 결과를 한 줄 씩 출력한다. 첫 줄에 명령어 실행 횟수를 입력받는다. 명령어는 다음과 같다. push X: 정수 X를 스택에 넣는 연산이다. pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. size: 스택에 들어있는 정수의 개수를 출력한다. empty: 스택이 비어있으면 1, 아니면 0을 출력한다. top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. 알고리즘 테스트 케이스 수 만큼 명령어를 읽어 들이고 실행한다. #include #include #include #include #inclu..

Algorithm 2021.07.28

[백준 10773] 제로

제로 문제설명 단순히 0이 들어오면 가장 최근에 입력되었던 수를 뺴고 그렇지 않으면 저장한 뒤, 전체 수의 합을 출력하는 문제이다. 알고리즘 입력된 수가 0이면 stack 에서 top을 지운다. 입력된 수가 1이면 stack 에 넣는다. #include #include #include using namespace std; int main() { int K; cin >> K; stack s; int x; for (int i = 0; i > x; if (x == 0) s.pop(); else s.push(x); } int sum = 0; for (int i = 0; s.size(); i++) { sum += s.top(); s.pop(); } cout 나중에 온 것이 가장 먼저..

Algorithm 2021.07.27