반응형
문제
구현 방법
높이 H를 입력 받을 때 마다, 이를 list에 저장한다.(Vector가 더 효율적일듯) 이후, list를 역순으로 순회하며 만약 순회중인 해당 값이 H보다 크다면, 정답 MAX에 list의 size를 더하고 순회를 중단합니다. 만약 H보다 작다면, 해당 값을 삭제시키고 순회를 마저 진행합니다. 이 과정을 반복하면 list에는 결국 내림차순으로 데이터가 저장되기 때문에, 한번이라도 H보다 값이 크다면 이후의 순회는 생략하는 구조입니다.
코드
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
31
32
33
34
35
36
37
38
39
|
#include <iostream>
#include <list>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
long long Max = 0;
cin >> N;
list<int> Height_List;
for (int i = 0; i < N; ++i)
{
int H;
cin >> H;
if (i != 0)
{
for (list<int>::iterator iter = Height_List.end();;)
{
iter--;
if (H >= *iter)
iter = Height_List.erase(iter);
else
{
Max += Height_List.size();
break;
}
if (iter == Height_List.begin())
break;
}
}
Height_List.emplace_back(H);
}
cout << Max;
}
|
cs |
반응형
'코딩 > 문제풀이-백준' 카테고리의 다른 글
백준 1715번 - 카드 정렬하기 (C++) (0) | 2021.04.27 |
---|---|
백준 14503번 - 로봇 청소기 (C++) (0) | 2021.04.09 |
백준 1929번 - 소수 구하기 C++ (0) | 2021.04.08 |
백준 7562번 - 나이트의 이동 (C++) (0) | 2021.04.07 |
백준 2504번 - 괄호의 값 (C++) (0) | 2021.04.04 |
댓글