관리자 글쓰기
스택
2024. 10. 28. 14:03 - pingu-s
#include <iostream>
#include <stack>

using namespace std;

int main() {
  stack<int> st; // int 타입의 스택 생성

  st.push(10); // 스택: 10
  st.push(20); // 스택: 10, 20
  st.push(30); // 스택: 10, 20, 30

  while (!st.empty()) {
    // top(): 스택에 마지막으로 삽입한 원소 반환. 시간 복잡도: O(1)
    cout << st.top() << " ";
    // pop() : 스택의 맨 위 원소 제거. 시간 복잡도: O(1)
    st.pop(); // 출력한 요소 제거
  }
  cout << endl; // 줄바꿈
  
  return 0;
}

 

문8. 괄호 짝 맞추기

#include <iostream>
#include <stack>

using namespace std;

bool solution(string s) {
  stack<char> stack;

  for (char c : s) {
    if (c == '(') {
      stack.push(c); // '(' 괄호를 스택에 푸시
    }
    else if (c == ')') { // ')' 괄호가 나오면 스택이 비어 있는지 확인
      if (stack.empty()) {
        return false; // 스택이 비어 있다면 괄호 짝이 맞지 않으므로 false반환
      } else {
        stack.pop(); // 비어 있지 않다면 팝(짝을 찾았으니 여는 괄호를 스택에서 제거)
      }
    }
  }
  
  // 스택이 비어 있다면 괄호가 올바르게 닫힌 것이므로 true 반환, 아니라면 false 반환
  return stack.empty();
}

int main() {
  cout << solution("(())()");
  return 0;
}

 

문9. 10진수를 2진수로 변환하기

#include <iostream>
#include <stack>
#include <string>

using namespace std;

string solution(int decimal) {
  if (decimal == 0) return "0"; // 입력값이 0이면 바로 처리

  stack<int> stack;

  while(decimal > 0) {
    stack.push(decimal % 2); // 2로 나눈 나머지를 스택에 삽입
    decimal /= 2;
  }

  string binary = "";
  while (!stack.empty()) {
    // 스택에서 차례대로 top()에 해당되는 값을 binary에 추가
    binary += to_string(stack.top());
    stack.pop();
  }
  return binary;
}

int main() {
  cout << solution(10);
  return 0;
}

 

'개발 > C++' 카테고리의 다른 글

코테 기록용  (0) 2024.11.04
배열  (0) 2024.07.30
STL 알고리즘  (0) 2024.07.29
STL 컨테이너  (0) 2024.07.29
문법 정리  (0) 2024.07.25