250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Representation Learning
- 구현
- 백준
- 분할정복
- 재귀
- 문자열
- SSL
- c++
- Multi-Scale Patch
- self supervised learning
- paper review
- 논문리뷰
- 수학
- BOJ
- anomaly detection
- 분할 정복
- 정렬
- 이분탐색
Archives
- Today
- Total
갓생살기프로젝트
[백준/BOJ/C++] 17608번 막대기 - 구현 본문
728x90
1. 문제
아래 그림처럼 높이만 다르고 (같은 높이의 막대기가 있을 수 있음) 모양이 같은 막대기를 일렬로 세운 후, 왼쪽부터 차례로 번호를 붙인다. 각 막대기의 높이는 그림에서 보인 것처럼 순서대로 6, 9, 7, 6, 4, 6 이다. 일렬로 세워진 막대기를 오른쪽에서 보면 보이는 막대기가 있고 보이지 않는 막대기가 있다. 즉, 지금 보이는 막대기보다 뒤에 있고 높이가 높은 것이 보이게 된다. 예를 들어, 그림과 같은 경우엔 3개(6번, 3번, 2번)의 막대기가 보인다.
N개의 막대기에 대한 높이 정보가 주어질 때, 오른쪽에서 보아서 몇 개가 보이는지를 알아내는 프로그램을 작성하려고 한다.
2. 입력
첫 번째 줄에는 막대기의 개수를 나타내는 정수 N (2 ≤ N ≤ 100,000)이 주어지고 이어지는 N줄 각각에는 막대기의 높이를 나타내는 정수 h(1 ≤ h ≤ 100,000)가 주어진다.
3. 출력
오른쪽에서 N개의 막대기를 보았을 때, 보이는 막대기의 개수를 출력한다.
4. 풀이
오른쪽 막대기부터 봤을 때 그 막대기보다 높이가 작거나 같은것은 카운트하지 않고 큰 것만 카운트 한다.
이 때, 현재 막대기보다 큰 값이 나올때 카운트를 하면서 막대기 높이를 새로 나온 막대기 값으로 갱신한다.
이렇게 해서 우측부터 좌측으로 차례대로 계산한다.
5. 소스코드
#include <iostream>
using namespace std;
int main(){
int N; //막대기의 개수
cin>>N;
int *arr = new int[N];
int count = 0;
int right;
for(int i = 0; i < N; i++){
cin>>arr[i];
}
right = arr[N-1];
for(int i = N - 2; i >= 0; i--){
if(arr[i] > right){
count++;
right = arr[i];
}
}
cout<<count + 1;
}
728x90
'차근차근 알고리즘 > etc.' 카테고리의 다른 글
[백준/BOJ/C++] 11650번 좌표 정렬하기 - 정렬 (0) | 2021.01.29 |
---|---|
[백준/BOJ/C++] 10814번 나이순 정렬 - 정렬 (0) | 2021.01.29 |
[백준/BOJ/C++] 10819번 차이를 최대로 - 완전탐색 (0) | 2021.01.29 |
[백준/BOJ/C++] 2503번 숫자야구 - 완전탐색 (0) | 2021.01.29 |
[백준/BOJ/C++] 2965번 캥거루 세마리 - 구현 (0) | 2021.01.26 |