더듬이의 헬로월드

Hello, World!

알고리즘 풀이/백준,BOJ [코드플러스]

[백준/자료구조 1/C++] 1874 - 스택 수열

더듬이 2021. 9. 27. 17:39
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;
}


잘못된 부분이나 오해할 수 있는 부분이 있다면 언제든지 

댓글 남겨주시기 바랍니다!

728x90