728x90
문제 링크
https://www.acmicpc.net/problem/2872
2872번: 우리집엔 도서관이 있어
문제 상근이는 컴퓨터 공학의 일인자가 되기 위해 책을 매우 많이 구매했다. 하지만, 집에 책장이 없어서 책을 탑처럼 쌓아놓고 있다. 오늘은 오랜만에 상근이가 집에서 휴식을 취하는 날이다. 상근이는 책을 알파벳 순서대로 정렬하려고 한다. 사전 순으로 가장 앞서는 책은 가장 위에 놓고, 가장 뒤에 있는 책은 가장 밑에 놓아야 한다. 책을 정렬할 때 사용할 수 있는 방법은 책 하나를 뺀 다음, 가장 위에 놓는 것이다. 책은 1부터 N까지 번호가 책 이름의 사전
www.acmicpc.net
풀이 아이디어
처음엔 어떻게 풀지 좀 막막하다가, 여러 그림을 그려보고 방법을 깨닫게 되었다.
다음과 같이 책이 놓여져 있다고 치자.
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 |