백준 문제풀이(16)
-
백준 #1406 에디터 c++
백준 1406번 에디터 문제이다. 레벨은 실버3. 일단 분류가 알고리즘상 스택으로 분류가 되어있다. 하지만 스택으로 풀면 조금 귀찮은 부분이 없지 않고, 리스트로 풀면 가장 간단한데, 그 이유인 즉, 스택은 인덱스 수정을 하려면 그 과정이 복잡하지만 리스트는 중간 삽입이 손쉽게 가능하기 때문이다. //list.insert(iter, k); //list.erase(iter); 리스트의 경우 위와 같은 코드를 활용해서 P $ 와 D 명령어를 쉽게 구현할 수 있다. 스택으로 구현하는 방법을 생각해보자. 스택은 특성상, Push를 할 경우 가장 위쪽에 추가가 되고, pop을 해도 가장 위쪽 값이 사라지며 값 반환 역시 가장 위에 있는 값 밖에 되지 않는다. 그렇기 때문에 기존의 스택 말고, 다른 스택을 정의해서..
2021.05.02 -
백준 #9012번 괄호 c++
백준 9012번 괄호 문제이다. 실버4의 문제. 스택의 활용 정도 되는 문제이다. 스택의 기본구조인 선입후출의 개념과 stack.empty(), stack.top() 등의 개념을 활용하여 풀 수 있는 문제이다. 이 문제의 핵심은 닫는 괄호 ')' 의 짝이 있는가를 찾는 것이다. 처음부터 닫는 괄호가 들어오면 당연히 NO를 반환해야 하는것이고 닫는 괄호와 여는 괄호의 갯수가 같아도, 짝이 맞지 않으면 해결할 수 없다. 아래의 코드를 살펴보자. #include #include #include using namespace std; int main() { int testcase; cin >> testcase; // 몇 번 돌지 입력받음 while(testcase--) { stack st; string s; ci..
2021.05.01 -
백준 #9093 단어 뒤집기 C++
백준 9093 단어 뒤집기 문제이다. 랭크는 브론즈1.(브론즈 1이면서 실버 문제보다 까다롭다) 이 문제 역시 스택 자료구조를 활용해서 해결하는 문제이다. 문제에서 알 수 있듯, 문장 전체를 Revese 하는 것이 아닌, 각 단어마다 reverse를 해줘야 해서 구현하기 귀찮은 문제이다. 하지만 스택과 문자열을 적절히 활용하면 해결 가능하다. 아래는 c++ 코드 전문이다. #include #include #include using namespace std; int main() { int testCase; cin >> t; cin.ignore(); while (testCase--) { string str = " "; getline(cin, str); str += ' '; stack stack; for (i..
2021.05.01 -
백준 #10828 스택 c++
백준 10828 스택 문제이다. solve.ac에서 제공하는 실버4 문제이다. 문제를 읽어보면 단순히 스택을 구현하라는 문제이다. 물론 이 문제를 어떤 언어로 푸느냐에 따라서 문제 난이도가 천차만별이지만, 대부분의 하이레벨 언어에서는 기본 라이브러리에서 스택을 지원하기 때문에 문제를 푸는 것은 어렵지 않다. 물론 C를 사용해서 풀면, 스택을 다 구현해야 하기 때문에 상당히 복잡하다. 아래는 c++ 코드 전문이다 #include #include #include #include #include using namespace std; // //14 //push 1 //push 2 //top => 2 //size =>2 //empty => 거짓 => 0 //pop => 맨위 => 2 //pop => 맨위 => 1..
2021.04.30