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