열심히 코딩 하숭!

[알고리즘][스택] 17608번 막대기 | baekjoon 문제 풀이 본문

코딩테스트/알고리즘

[알고리즘][스택] 17608번 막대기 | baekjoon 문제 풀이

채숭이 2023. 3. 29. 13:32

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

 

17608번: 막대기

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

www.acmicpc.net

 

 

 

 

풀이

배열로도 풀고 스택으로도 풀었다. 풀이 방법 자체는 유사하고, 단순하게 비교하여 값을 갱신해주는 문제였다!

 

[배열]

#include <iostream>
using namespace std;

int arr[100000];

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

	int N;
	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}

	int count = 1;
	int maxLength = arr[N - 1];

	for (int i = N - 2; i >= 0; i--) { // 배열 뒷 순서부터 가야함! / arr[N-1]은 제외.
		if (arr[i] > maxLength) {
			maxLength = arr[i];
			count++;
		}
	}
	cout << count;
}

 

 

[스택]

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

stack<int> st;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	
	int N;
	cin >> N;

	for (int i = 0; i < N; i++) {
		int s;
		cin >> s;
		st.push(s);
	}

	int count = 1;
	int maxLength = st.top();
	st.pop();

	for (int i = 0; i < (N - 1); i++) {
		if (st.top() > maxLength) {
			maxLength = st.top();
			count++;
		}
		st.pop();
	}
	cout << count;
}

 

배열이 조금 더 빨랐다