[백준/BOJ] 백준 12014번 : 주식

2023. 10. 17. 00:13알고리즘 문제풀이

https://www.acmicpc.net/problem/12014

 

12014번: 주식

입력 파일에는 여러 테스트 케이스가 포함될 수 있다. 파일의 첫째 줄에 케이스의 개수 T(2 ≤ T ≤ 100)가 주어지고, 이후 차례로 T 개 테스트 케이스가 주어진다. 각 테스트 케이스의 첫 줄에 두

www.acmicpc.net

 

가장 긴 증가하는 부분 수열(n log n)을 찾아서 그 길이가 k이상인지 확인하는 방법을 통해 문제를 해결했다.

 

코드

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

int t;
int n, k;
vector<int> stock;
vector<int> check;
vector<int>::iterator it;

void init() {
	stock.clear();
	check.clear();
}

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	cin >> t;

	for (int tc = 0; tc < t; tc++) {
		init();
		cin >> n >> k;

		for (int i = 0; i < n; i++) {
			int input;
			cin >> input;
			stock.push_back(input);
		}

		//가장 긴 증가하는 부분 수열(n log n) 찾기

		for (int i = 0; i < n; i++) {
			it = lower_bound(check.begin(), check.end(), stock[i]);

			if (it == check.end()) {
				check.push_back(stock[i]);
			}
			else {
				(*it) = stock[i];
			}
		}

		cout << "Case #" << tc + 1 << "\n";

		//가장 긴 증가하는 부분 수열이 k 이상일때
		if (check.size() >= k) {
			cout << 1 << "\n";
		}
		else {
			cout << 0 << "\n";
		}

	}

	return 0;
}