본문 바로가기

algorithm

11000 , 2149

11000 

 

어느 강의실에 배정되는 지는 중요하지 않다. 배정될 수 있는 지만 중요하다.  

 


 

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

int N;
int ans = 1;
vector<pair<int,int>> v;
priority_queue<int,vector<int>,greater<int>> pq;

bool compare(pair<int,int> a,pair<int,int> b)
{
	return a.first<b.first;
}
int main() {
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>N;
	for(int i = 0; i < N; i++)
	{
		int a = 0, b = 0;
		cin>>a>>b;
		v.push_back({a,b});
	}
	sort(v.begin(),v.end(),compare);
	pq.push(v[0].second);
	for(int i = 1;i < N; i++)
	{
		if(pq.top()>v[i].first) ans++;
		else pq.pop();
		pq.push(v[i].second);
	}
   cout<<ans;
   return 0;
}

 

2149

 

푸는 방법이 다양한 것 같다. 구조체를 이용해서 구현하던데...어떻게 하는거지?ㅎㅎ

 


 

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
string key,code;
vector<string> encoded;
vector<string> decoded;
int main() {
	bool used [11]={0};
	cin>>key>>code;
	string p = key;
	sort(p.begin(),p.end());
	int n = code.length() / key.length();
	for(int i = 0; i < p.length(); i++){
		string tmp="";
		tmp+=p[i]; //식별자로 key[i] 문자를 사용
		for(int j = i * n; j < i * n + n; j++) tmp+=code[j];
		encoded.push_back(tmp);
	}

	for(int i = 0; i < key.length(); i++){
		char c=key[i];
		for(int j = 0 ; j < encoded.size(); j++){
			if(!used[j] && encoded[j][0]==c) {
				decoded.push_back(encoded[j]);
				used[j]=true;
				break;
			}
		}
	}

	for(int i = 1; i <= n; i++){
		for(int j = 0 ; j < decoded.size(); j++){
			cout<<decoded[j][i];
		}
	}
	return 0;
}

 

'algorithm' 카테고리의 다른 글

휴게소 세우기  (0) 2022.05.11
보석 도둑  (0) 2022.05.09
1655  (0) 2022.03.27
4803 트리  (0) 2022.03.26
A->B  (0) 2022.03.24