스택
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;
}