[BOJ] 17608번: 막대기
✔️ 문제
😎 소스 코드
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int solution(vector<int> v, int n){
stack<int> s;
int answer = 0;
for (int j = 0; j < n; j++) {
if (s.empty() || v[j] < s.top()) {
s.push(v[j]);
} else {
s.pop();
while (!s.empty() && s.top() <= v[j]) {
s.pop();
}
s.push(v[j]);
}
}
answer = (int)s.size();
cout << answer << endl;
return answer;
}
int main() {
int N, input;
cin >> N;
vector<int> v;
// 각각의 막대기 높이를 입력받음
for (int i = 0; i < N; i++) {
cin >> input;
v.push_back(input);
}
solution(v, N);
return 0;
}
✊ 문제를 풀고 나서
- 문제 접근
1. 입력받은 각각의 막대기를 벡터 v에 push
- 스택 s에 v의 원소들을 하나씩 넣어주는데..
2-1. 스택이 비었거나 현재 넣어주려는 값이 스택 top보다 작으면 push
2-2. 그렇지 않으면? (현재 값이 top보다 크거나 같음) while 문으로 현재 값보다 top이 클 때까지 계속 pop해준다. 그 후 스택에 push
- 스택 사이즈가 answer
Author And Source
이 문제에 관하여([BOJ] 17608번: 막대기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@rany/BOJ-막대기
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int solution(vector<int> v, int n){
stack<int> s;
int answer = 0;
for (int j = 0; j < n; j++) {
if (s.empty() || v[j] < s.top()) {
s.push(v[j]);
} else {
s.pop();
while (!s.empty() && s.top() <= v[j]) {
s.pop();
}
s.push(v[j]);
}
}
answer = (int)s.size();
cout << answer << endl;
return answer;
}
int main() {
int N, input;
cin >> N;
vector<int> v;
// 각각의 막대기 높이를 입력받음
for (int i = 0; i < N; i++) {
cin >> input;
v.push_back(input);
}
solution(v, N);
return 0;
}
- 문제 접근
1. 입력받은 각각의 막대기를 벡터 v에 push- 스택 s에 v의 원소들을 하나씩 넣어주는데..
2-1. 스택이 비었거나 현재 넣어주려는 값이 스택 top보다 작으면 push
2-2. 그렇지 않으면? (현재 값이 top보다 크거나 같음) while 문으로 현재 값보다 top이 클 때까지 계속 pop해준다. 그 후 스택에 push - 스택 사이즈가 answer
- 스택 s에 v의 원소들을 하나씩 넣어주는데..
Author And Source
이 문제에 관하여([BOJ] 17608번: 막대기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rany/BOJ-막대기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)