Koala - 11기/코딩테스트 준비 스터디

[백준 / C++] 2872번 우리집엔 도서관이 있어

Langerak 2023. 9. 3. 17:34

문제

설명

책 순서대로 정렬하는데, 책을 정렬 할 수 있는 방법은 책을 빼서 맨 위에 올려놓는 방법 뿐이다.

입력 받은 책을 나열하고, 뒤에서부터 읽어 순서가 맞지 않은 책의 개수가 정답이다.

뒤에서부터 읽을 때 책이 연속적으로 순서가 맞지 않아도 된다.

코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int N; // 책의 개수
int answer; // 정답

int main() {

	cin >> N;

	answer = N;

	vector<int> book(N);

	for (int i = 0; i < N; i++) {
		cin >> book[i];
	}

	vector<int> sortedBook(N);
	copy(book.begin(), book.end(), sortedBook.begin());

	sort(sortedBook.begin(), sortedBook.end());

	int current = N - 1;

	for (int i = N - 1; i >= 0; i--) {
		if (book[i] == sortedBook[current]) {
			answer--;
			current--;
		}
	}
	
	cout << answer;

	return 0;
}