728x90
반응형
https://www.acmicpc.net/problem/1700
1700번: 멀티탭 스케줄링
기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전
www.acmicpc.net
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, k, answer = 0;
cin >> n >> k;
vector<int> tap(n, -1);
vector<int> v(k);
for(int i = 0; i < k; i++){
cin >> v[i];
}
for(int i = 0; i < k; i++){
// 이미 꽂혀있는 경우
if(find(tap.begin(), tap.end(), v[i]) != tap.end()) continue;
bool isplugged = false;
// 비어있는 콘센트가 있는 경우
for(int j = 0; j < n; j++){
if(tap[j] == -1) {
tap[j] = v[i];
isplugged = true;
break;
}
}
if(isplugged) continue;
// 이미 꽂혀있지 않고 비어있는 콘센트가 없는 경우
int last = -1, index = -1;
for(int j = 0; j < n; j++){
int tmp = 0;
for(int t = i + 1; t < k; t++){
if(v[t] == tap[j]){
break;
}
tmp++;
}
if(tmp > last){
last = tmp;
index = j;
}
}
tap[index] = v[i];
answer++;
}
cout << answer << endl;
return 0;
}
전기용품을 사용하는 횟수(k)만큼 반복하면서 세 가지 경우로 나눌 수 있다.
1) 기기가 이미 콘센트에 꽂혀있는 경우
2) 비어있는 콘센트가 있는 경우
3) 기기가 이미 콘센트에 꽂혀있지 않고 비어있는 콘센트도 없는 경우
이 중 플러그를 빼야하는 경우는 3)이다.
3)을 구현하는 것이 어려웠는데, 각 콘센트에 현재 꽂혀 있는 기기가 최대한 다시 늦게 나오는 콘센트를 선택하면 된다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 14938번 서강그라운드 (C++) (0) | 2022.05.04 |
---|---|
[BOJ] 23843번 콘센트 (C++) (0) | 2022.05.01 |
[BOJ] 11123번 양 한마리... 양 두마리... (C++) (0) | 2022.04.30 |
[BOJ] 3184번 양 (C++) (0) | 2022.04.30 |
[BOJ] 2589번 보물섬 (C++) (0) | 2022.04.29 |