문제 링크 : https://www.acmicpc.net/problem/1700
1700번: 멀티탭 스케줄링
기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전기용품의 플러그를 뺐다 꽂았다 하는 불편함을 겪고 있다. 그래서 준규는 자신의 생활 패턴을 분석하여, 자기가 사용하고 있는 전기용품의 사용순서를 알아내었고, 이를 기반으로 플러그를 빼는 횟수를 최소화하는 방법을 고안하여 보다 쾌적한 생활환경을 만들려고 한다. 예를 들어
www.acmicpc.net
문제 설명
멀티탭 구멍의 개수와 전기용품의 총 사용횟수가 주어지고
전기용품 이름이 사용순서대로 주어짐 이때 멀티탭에서 플러그를 최소한으로 빼는 경우의 수를 출력
알고리즘
1. 첫번째 전기용품은 플러그에 꼽고 그다음 플러그 의 크기만큼 전기용품을 꼽는데 , 이미 꼽혀있는 플러그는 꼽을 필 요가 없으니까 넘긴다.
2. 플러그가 모두 사용중일 때 앞으로 사용할 전기 제품중 가장 나중에 사용할제품이거나 사용하지 않을 제품의
플러그를 빼고 다음 제품 코드를 꼽는다 .
코드
\1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { int N, K; int arr[101]; vector<int>mult; cin >> N >> K; int result = 0; //플러그 사용 순서 입력 for (int i = 0; i < K; i++) { cin >> arr[i]; } //첫번째 사용 플러그 꼽기 mult.push_back(arr[0]); for (int i = 1; i < K; i++) { //플러그가 모두 사용중 if (mult.size() == N) { bool pos = false; for (int j = 0; j < N; j++) { //플러그가 이미 꼽혀있다. if (arr[i] == mult[j]) { pos = true; } } if (pos == true)continue; //플러그가 꼽혀있지 않다. else { //플러그를 1회 뺴야되기때문에 result ++ result++; vector<pair<int, int>>P; for (int j = 0; j < N; j++) { //idx 최대값 int idx = 100; //꼽혀있는 플러그들이 언제 사용할 것인지 찾는 과정 for (int k = i; k < K; k++) { if (mult[j] == arr[k]) { idx = k; break; } } P.push_back(make_pair(idx, mult[j])); } sort(P.begin(), P.end()); for (int j = 0; j < N - 1; j++) { //가장 나중에 사용할 제품 빼고는 안빼도 되니까 그대로 둔다. mult[j] = P[j].second; } //새 전기제품 꼽기 mult[N - 1] = arr[i]; } } //멀티탭에 빈 자리가 있다. else { bool pass = false; for (int j = 0; j < mult.size(); j++) { //이미꼽혀있으면 pass if (arr[i] == mult[j]) { pass = true; break; } } //꼽혀잇지 않으면 꼽는다. if (!pass)mult.push_back(arr[i]); } } cout << result; } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 1931번: 회의실 배정 (0) | 2020.04.09 |
---|---|
백준 11000번: 강의실 배정 (0) | 2020.04.09 |
백준 1003번 : 피보나치 함수 (0) | 2020.04.06 |
백준 2573번: 빙산 (0) | 2020.04.06 |
백준 9095번 :R G B 거리 (0) | 2020.04.06 |