728x90
난이도
Silver3
문제집 링크
https://www.acmicpc.net/workbook/view/3953
문제 링크
https://www.acmicpc.net/problem/1874
문제 해결 과정
숫자를 입력 받고 현재 스택에서 가장 높은 숫자보다 높으면, 입력받은 숫자가 될 때까지
최고치를 하나씩 늘리면서 스택에 넣어준다.
그러고 나서, 입력받은 값이 현재 스택의 top이라면, pop!
top이 아니라면 NO!
주의할 점
1.문자를 한번에 입력받고 출력해야 버퍼를 덜 사용해야, 실행 시간 을 줄일 수 있다.
2.반복문 사용에 주의해야 한다.
코드
#include <stack>
#include <iostream>
using namespace std;
int main() {
stack<int> BOJstack;
string result;
int repeat;
cin >> repeat;
//Input Data 개수
int Nowhigh = 0;
//현재 넣은 값들 중 최고값
int cmd;
for (int i = 0; i < repeat; i++)
{
cin >> cmd;
//Input Data
while (cmd > Nowhigh) {
//만일 입력한 데이터가 현재 최고가 아니라면
//그 차이만큼 스택에 하나씩 입력
Nowhigh++;
BOJstack.push(Nowhigh);
result+= "+\n";
}
//스택의 맨 위가 입력한 숫자와 같으면
if (BOJstack.top() == cmd) {
BOJstack.pop();
result += "-\n";
}
else {//이루어질 수 없는 경우
result = "NO";
break;
}
}
cout << result << endl;
}
잘못된 부분이나 오해할 수 있는 부분이 있다면 언제든지
댓글 남겨주시기 바랍니다!
![](https://t1.daumcdn.net/keditor/emoticon/niniz/large/006.gif)
728x90
'알고리즘 풀이 > 백준,BOJ [코드플러스]' 카테고리의 다른 글
[백준/자료구조 1/C++] 1406-에디터 (0) | 2021.09.14 |
---|---|
[백준/자료구조 1/C++] 9012-괄호 (0) | 2021.09.04 |
[백준/자료구조 1/C++] 10828-스택 (0) | 2021.09.02 |
[백준/자료구조 1/C++] 9093-단어 뒤집기 (0) | 2021.09.02 |