728x90
문제 링크
https://www.acmicpc.net/problem/2872
풀이 아이디어
처음엔 어떻게 풀지 좀 막막하다가, 여러 그림을 그려보고 방법을 깨닫게 되었다.
다음과 같이 책이 놓여져 있다고 치자.
3 |
1 |
4 |
5 |
2 |
이 경우, 2를 먼저 맨위로 올리고, 1을 그 다음에 올리면 총 2번만에 책을 12345로 정렬할 수 있다.
그 말인 즉슨, 345는 정렬이 이미 되어있다는 뜻이다.
3 |
1 |
4 |
5 |
2 |
이렇게 3개의 책은 정렬이 되어있다는 뜻.
즉 아래에서부터 올라오면서 제일 큰 숫자를 기준으로, 1씩 증가되는 수열의 길이를 구한다음, 총 책의 갯수에서 빼면 된다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <cstdio>
using namespace std;
int n, b[300001], cur;
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &b[i]);
cur = n;
for (int i = n - 1; i >= 0; i--)
if (b[i] == cur)cur--;
cout<<cur
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'알고리즘 > 백준' 카테고리의 다른 글
백준 19236 청소년 상어 : 내가 했던 4가지 놓친 점들과 함께 (0) | 2020.11.20 |
---|---|
백준 1972 놀라운 문자열 - substr로 해결못하는 문자열 처리 문제 (0) | 2020.06.29 |
백준 1655 가운데를 말해요 : 우선순위 큐 두개로 가운데를 빠르게 c++ (2) | 2020.04.15 |
백준 2206 벽부수고 이동하기 - 이제는 3차원 visited 배열이 필요하다. c++ (2) | 2020.04.07 |
백준 14500 테트로미노 - 모든게 다 dfs로 되는건 아니다 c++ (2) | 2020.04.04 |