CodingTest/BOJ

[BOJ 17608] 백준 막대기 풀이 - C++

황수진 2021. 9. 29. 00:28

사용언어 :  C++

 

 

 

문제풀이

 * 스택 이용!

(1) 입력 값들을 순서대로 스택에 저장

stack<int> stck;
	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> tmp;
		stck.push(tmp);
	}

 

(2) 스택 순서대로 현재 최대 높이와 비교한다

(현재 높이보다 크면 answer값 +1 해주고, 최대높이(cnt)값도 업데이트 해준다)

(그렇지 않으면 스택 pop만 해준다)

	int cnt = 0; //현재 최대 높이
	while (!stck.empty()) {
		if (stck.top() > cnt) {
			answer++;
			cnt = stck.top();
		}
		stck.pop();
	}

 

 

전체코드

 

#include <iostream>
using namespace std;
#include<stack>

int N; int tmp; int answer = 0;
int main() {
	stack<int> stck;
	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> tmp;
		stck.push(tmp);
	}
	int cnt = 0;
	while (!stck.empty()) {
		if (stck.top() > cnt) {
			answer++;
			cnt = stck.top();
		}
		stck.pop();
	}
	cout << answer;
}

 

 

 

총평

알고리즘만 잘 짜면 쉬운 문제


문제 출처

https://www.acmicpc.net/problem/17608

 

17608번: 막대기

아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로

www.acmicpc.net