https://www.acmicpc.net/problem/1700
1700번: 멀티탭 스케줄링
기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전
www.acmicpc.net
풀이
1. 새로운 전기용품을 충전하고 싶을때 3가지 경우가 있다
1) 이미 꽂혀 있는 경우
-> PASS
2) 꽂혀있지는 않지만, 멀티탭에 빈자리가 있음
-> 빈자리에다가 꼽는다
3) 자리가 없다
-> 이 경우가 코딩 필요
2. 현재 멀티탭에 꼽혀있는 전자제품 중에 가장 오랫동안 사용 안하는 걸 찾으면 된다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
int n, k;
int schedule[101];
int multiTap[101] = { 0, };
int main()
{
int answer = 0;
cin >> n >> k;
for (int i = 0; i < k; i++)
cin >> schedule[i];
for (int i = 0; i < k; i++)
{
bool flag = false;
//1) 이미 꽂혀 있다면 pass
for (int j = 0; j < n; j++)
{
if (multiTap[j] == schedule[i])
{
flag = true;
break;
}
}
if (flag == true)
continue;
//2)빈칸이 있으면 꼽아
for (int j = 0; j < n; j++)
{
if (multiTap[j] == 0)
{
multiTap[j] = schedule[i];
flag = true;
break;
}
}
if (flag == true)
continue;
//3) 빈칸 필요
int last_need = -1; // 가장 늦게 다가올 차례
int index = -1; // 뺄 멀티탭 자리
for (int j = 0; j < n; j++)
{
int tmp = 0;
for (int t = i+1;t < k; t++)
{
if (schedule[t] == multiTap[j])
{
break;
}
tmp++;
}
if (tmp > last_need)
{
last_need = tmp;
index = j;
}
}
multiTap[index] = schedule[i];
answer++;
}
cout << answer << endl;
}
'c++ > Baekjoon Online' 카테고리의 다른 글
백준 1507 : 궁금한 민호 C++ (0) | 2021.06.27 |
---|---|
백준 1946 : 신입사원 C++ (0) | 2021.06.26 |
백준 2579 : 계단 오르기 C++ (0) | 2020.11.20 |
백준 : 다리 만들기 2 c++ (0) | 2020.11.19 |
백준 : 기타줄 C++ (0) | 2020.11.18 |