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
- 스프링심화반
- 알고리즘
- 타임리프
- 가상 채팅서버
- 백준 1992번 풀이
- JPA
- 전문가를 위한 스프링
- 스파르타코딩클럽 #spartacodingclub #누구나큰일낼수있어
- spartacodingclub
- 1시간 만에 끝내는 직장인 코딩 용어
- 백준
- 백준 #N과 M(4) #백트래킹
- thymeleaf
- 스프링 MVC 2편
- SQL
- 백준 1992번
- 자바의 정석 기초편
- 스프링
- 김영한님
- 스프링 입문을 위한 자바 객체 지향의 원리와 이해
- 팀300
- 누구나큰일낼수있어
- 객체지향의 사실과 오해
- 백준 2630번
- 전문가를 위한 스프링5
- C++
- 스프링 시큐리티 구조
- 스파르타코딩클럽
- 채팅서버 설계
- 스프링 핵심원리 기본편
Archives
- Today
- Total
민우의 코딩노트
3015번 오아시스 재결합 - C++ 본문
[문제]
https://www.acmicpc.net/problem/3015
[풀이]
스택에 넣을때 순감소 수열(Ex 10 9 8 ..)이 되도록 넣어야 한다.
중복 되는 경우(Ex 2 2 2)를 고려해야 한다.
1. 스택의 top()보다 지금 값이 큰 경우
순감소 수열이 되어야 하므로, 스택의 second 값인 중복 누적 값을 더하고, top()을 pop 한다.
2. 스택의 top()보다 지금 값이 같은 경우
순감소 수열이 되어야 하므로, 스택의 second 값인 중복 누적 값을 더하고, 변수 nu에 중복 누적 값+1을 해준다.
3. 스택의 top()보다 지금 값이 작은 경우
순감소 수열을 만족하므로, 스택에 넣어주면 된다.
위 조건에 상관없이 스택에 변수가 남아있는 경우, ans+=1(맞닿아 있는 경우)를 해주면 된다.
[코드]
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
long long ans = 0;
cin >> n;
stack<pair<int, int>> S;
while(n--){
int t;
cin >> t;
int nu = 1;
while(!S.empty() && S.top().first<=t){
if(S.top().first == t){
ans += S.top().second;
nu = S.top().second+1;
S.pop();
}
else {
ans += S.top().second;
S.pop(); nu = 1;
}
}
if(!S.empty()) {
ans++;
}
S.push({t, nu});
}
cout << ans;
}
'Algorithm > BOJ' 카테고리의 다른 글
18258번 큐 2 - C++ (0) | 2022.07.25 |
---|---|
6549번 히스토그램에서 가장 큰 직사각형 - C++ (0) | 2022.07.25 |
10773번 제로 - C++ (0) | 2022.07.16 |
10828번 스택 - C++ (0) | 2022.07.16 |
백준 2493번 - 탑 C++ (0) | 2022.04.23 |