🖥️ CS/Baekjoon Algorithms

#2565번 전깃줄 (C++)

한국의 메타몽 2020. 11. 17. 22:12

링크 : www.acmicpc.net/problem/2565

 

2565번: 전깃줄

첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는

www.acmicpc.net

문제 풀이는 다음과 같다. 

1. 잘라야 하는 전깃줄이 아닌 남겨둬야하는 전깃줄에 초점을 맞춘다.

2. 결국 '오름차순'으로 연결된 전깃줄들의 최대값이 살아남게 되고, 

전체 전깃줄의 갯수에서 최대값을 제외한 값들은 제거하게 된다.

3. 이를 통해 제거해야하는 전깃줄에 갯수를 구한다.

 

이 문제는 백준 11053번 가장 긴 증가하는 부분 수열의 연장판이다.

 

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

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

	int n = 0, max = 0;
	cin >> n;
    int *sum = new int[n];
	vector<pair<int,int>> v;
	for(int i=0; i<n; i++){
		int a, b = 0;
		cin >> a >> b;
		v.push_back(make_pair(a,b));
	}
	for(int i=0; i<n; i++) sum[i] = 1;
	sort(v.begin(), v.end());
	for(int i=1; i<v.size(); i++){
		for(int j=0; j<i; j++){
			if(v[i].second>v[j].second){
				if(sum[i]<sum[j]+1) sum[i] = sum[j]+1;
			}
		}
	}
	for(int i=0; i<v.size(); i++){
		if(sum[i]>max) max = sum[i];
	}
	cout << v.size()-max << "\n";
	return 0;
}

동적할당을 통해 배열을 생성하였으나, 애초에 최대 배열의 크기 500개가 그다지 큰 값이 아니여서

메모리 차이는 없다.

위는 동적할당, 아래는 sum[501]로 생성

'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글

#5430번 AC (C++)  (0) 2020.11.19
#1021번 회전하는 큐 (C++)  (0) 2020.11.18
#1874번 스택 수열 (C++)  (0) 2020.11.13
#4949번 균형잡힌 세상 (C++)  (0) 2020.11.10
#1676번 팩토리얼 0의 개수 (C++)  (0) 2020.11.09