http://acmicpc.net/problem/17608
{코드}
#include <iostream>
using namespace std;
int main() {
int rods[100001], n;
scanf("%d", &n);
for (int i=0; i<n; i++) {
scanf("%d", &rods[i]);
}
int max=rods[n-1], cnt=1;
for (int i=n-2; i>=0; i--) {
if (max < rods[i]) {
max = rods[i];
cnt++;
}
}
printf("%d\n", cnt);
}
{설명}
이 문제에서는 모든 막대기를 일렬로 나열한 후 오른쪽에서 보기 때문에 어떤 막대기는 오른쪽에 있는 모든 막대기보다 크면 보이게 되는 것입니다.
우선, 가장 오른쪽의 막대기, 즉, 마지막 인덱스의 막대기는 무조건 보이므로 이를 max값으로 잡고 왼쪽으로 하나씩 이동하며 만약 이 max값보다 막대기의 길이가 더 크면 max를 업데이트하고 보이는 막대기 개수(cnt)를 1 증가시킵니다.
이렇게 모든 막대기의 길이를 다 확인하고 나면 총 보이는 막대기의 개수를 알 수 있습니다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 20191번-C++] 줄임말 (0) | 2021.05.05 |
---|---|
[백준 17609번-C++] 회문 (0) | 2021.05.04 |
[백준 9012번-C++] 괄호 (0) | 2021.04.07 |
[백준 9093번-C++/파이썬] 단어 뒤집기 (0) | 2021.04.07 |
[백준 10828번 - C++] 스택 (0) | 2021.03.20 |