※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1965번 문제인 상자넣기이다.
문제는 아래 링크를 확인하자.

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

 

1965번: 상자넣기

정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가

www.acmicpc.net

왼쪽에 있는 상자가 오른쪽에 있는 상자에 들어가므로, 이 문제는 LIS를 구하는 문제와 같은 문제라는 것을 알 수 있다.

 

주어진 수열에서 LIS의 길이를 계산해주자.

 

아래는 제출한 소스코드이다.

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

vector<int> lis;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N; cin >> N; N--;
	int x; cin >> x; lis.push_back(x);

	while (N--) {
		cin >> x;
		int L = 0, R = (int)lis.size() - 1;
		while (L <= R) {
			int mid = (L + R) / 2;
			if (lis[mid] < x) L = mid + 1;
			else R = mid - 1;
		}
		if (L == lis.size()) lis.push_back(x);
		else lis[L] = x;
	}
	cout << lis.size();
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 1922 // C++] 네트워크 연결  (0) 2022.06.11
[BOJ 1495 // C++] 기타리스트  (0) 2022.06.10
[BOJ 1051 // C++] 숫자 정사각형  (0) 2022.06.08
[BOJ 1034 // C++] 램프  (0) 2022.06.07
[BOJ 1005 // C++] ACM Craft  (0) 2022.06.06

+ Recent posts