본문 바로가기

PS/BaekJoon

[C++/23843] 콘센트


 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.


콘센트가 여러개 존재하고, 그 콘센트를 빠르게 채워넣어야지 빠른 시간안에 충전을 할 수 있을 것이다.

비동기처럼 생각해서 문제를 해결했다. 일단 콘센트가 주어지면, 무조건 제일 오래 충전해야하는 애들을 집어넣고 그 뒤에  빈 곳에 넣어주면 됩니다. 근데 빈곳이 없고 전부 차있다면? 제일 적은 시간동안 충전하는 콘센트에 다시 충전하려고 꽂아주면 됩니다.

그렇게 계속해서 비교해가면서 충전을 계속한 결과, 가장 긴 충전시간이 걸린 콘센트를 구하면 답이 나옵니다.

우선순위 큐를 이용해서 가장 긴 충전시간을 구했고, 배열을 이용해서 계속해서 비교를 했습니다. 아마 더 나은 방법이 존재할 텐데 콘센트의 길이 입력이 1이상 10이하이고, 전자기기의 개수가 10,000개이여서 시간적인 문제는 없을 것이란 판단하에 문제를 충분히 해결할 수 있었습니다. 아래는 정답코드입니다.

#include<iostream>
#include<queue>
#include<cstring>

using namespace std;

int n,m,number,power[11];
priority_queue<int> pq;

void init() {
	
	cin >> n >> m;
	
	for(int i = 0; i < n; i++){
		cin >> number;
		pq.push(number);
	}

}

void solve() {
	
	int time = 0;
	memset(power,0,sizeof(power));
	
	while(!pq.empty()){
		
		int idx = -1;
		int current = 987654321;
		int electric = pq.top();
		
		for(int i = 0; i < m; i++){
			if(power[i] < current){
				current = power[i];
				idx = i;
			}
		}
		
		power[idx] += electric;
		pq.pop();
		
	}
	
	int answer = 0;
	
	for(int i = 0; i < m; i++){
		if(answer < power[i]){
			answer = power[i];
		}
	}
	
	cout << answer;
}

int main(){

	init();
	solve();
	
	return 0;
}

'PS > BaekJoon' 카테고리의 다른 글

[C++/24391] 귀찮은 해강이  (0) 2024.07.29
[C++/17089] 세친구  (0) 2024.07.23
[C++/20002] 사과나무  (0) 2024.07.22
[C++/1239] 차트  (0) 2024.07.17
[C++/9519] 졸려  (0) 2024.07.17