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 | 31 |
Tags
- dynamic programming
- GCD
- Euler circuit
- DynamicProgramming
- CS Academy
- Euler path
- implementation
- POJ
- Shortest path
- Eulerian path
- Cycle detecting
- graph modeling
- BST
- 백준
- Segment Tree
- bitmask
- Greedy
- flows
- hashing
- Dag
- scc
- BFSDFS
- BOJ
- backtracking
- Eulerian circuit
- graph
- Algospot
- disjoint-set
- mathematics
- Sieve_of_Eratosthenes
Archives
- Today
- Total
그냥 하는 노트와 메모장
CS Academy - Array Removal 본문
* CS Academy Round #9 - Array Removal
[ 분류 - DSU ]
이 문제의 특성은 다음과 같다.
1. 지워야하는 순서가 정해져 있다.
2. 순서가 정해져 있는 만큼, k 번째 수를 지웠을 때 큰 수 S_k와 k+1번째 수를 지웠을 때 큰 수 S_k+1는 서로 종속적이다.
3. 수를 제거해나가며 큰 수를 출력해야 한다.
먼저 Greedy하게 접근해보자. S_k와 S_k+1를 비교해보자면 S_k >= S_k+1이 성립함을 직관적으로 알 수 있다. 또한 2.번에 의해 서로 종속적이기 때문에, "순서를 거꾸로" 생각하자.
거꾸로 생각하면, 초기에 없는 데이터에서 하나씩 생성됨을 알 수 있다. 따라서 이를 DSU로 합치는 방식을 택하며, 지금 합친 것과 지금까지의 최대값을 비교해나가며 답을 "갱신"하면 된다.
또한 거꾸로 순서를 바꾸었기 때문에 이를 리스트나 스택에 저장한 뒤, 뒤집어서 출력해주면 되시겠다.
'Solved problems' 카테고리의 다른 글
[Network flow, MCMF] Graph modeling practices - Codeforce 편 (0) | 2018.09.29 |
---|---|
BOJ 14258 - XOR 그룹 (0) | 2018.09.01 |
BOJ 2549 - 루빅의 사각형 (0) | 2018.08.07 |
Algospot - 정렬 게임(SORTGAME) (0) | 2018.07.03 |
Algospot - 어린이날 (CHILDRENDAY) (0) | 2018.07.03 |
Comments