본문 바로가기

코딩테스트/Baekjoon

[BOJ/백준] C++ 1700 멀티탭 스케줄링

코드 작성은 서툴지만

 

문제자체가 설명이 많이 부족하다고 느껴 글로 남겨봅니다

 

 

처음에 생각했던 방식은

 

다음에 끼울 플러그를 검사해서 넣고 빼고를 반복하는 방식이었고

 

두번째로는 뒤에 올 플러그들을 검사해서 빈도수가 가장 적은것부터

 

순서대로 빼는것으로 구현해보았는데

 

두가지 다 문제에서 요구하는것은 아니었습니다

 

 

결국 문제 요지는 가장 나중에 올 플러그를 빼고 그자리에 다음 플러그를 꽂는 것입니다

 

페이지교체 알고리즘과 비슷하다고 생각해서

 

plug_count 벡터를 생성해서 초기값을 infinite로 두고 ( 여기서는 100으로 초기화 했습니다 )

 

그 플러그가 몇번째에 다시 존재하는지 번호를 매긴후에 max 값의 플러그를 교체했습니다

 

 

지적 감사히 받겠습니다

 

 

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

int main() {
	int n, k;
	cin >> n >> k;

	int count = 0;
	vector <int> arr;
	vector <int> plug;
	plug.assign(n, 0);


	for (int i = 0; i < k; i++) {
		int temp;
		cin >> temp;
		arr.push_back(temp);
	}

	int i = 0;
	while (arr[k-1] != 0) {
		bool remove = true;

		for (int j = 0; j < n; j++) {
			if (plug[j] == arr[i]) remove = false;
		}

		if (remove == true) {
			for (int k = 0; k < n; k++) {
				if (plug[k] == 0) {
					plug[k] = arr[i];
					remove = false;
					break;
				}
			}
		}

		if (remove == true) {
			vector <int> plug_count;
			plug_count.assign(n, 100);
			for (int l = i+1; l < k; l++) {
				for (int m = 0; m < n; m++) {
					if (arr[l] == plug[m] && plug_count[m] == 100)
						plug_count[m] = l;
				}
			}
			int max=0;
			int num = 0;
			for (int a = 0; a < n; a++) {
				if (plug_count[a] > max) {
					max = plug_count[a];
					num = a;
				}
			}

			plug[num] = arr[i];
			count++;
		}

		arr[i] = 0;
		i++;
	}

	cout << count;

	return 0;
}

 

 

'코딩테스트 > Baekjoon' 카테고리의 다른 글

[BOJ/백준] C++ 4796 캠핑 / while문 오류  (0) 2023.08.22
[BOJ/백준] C++ 1789 수들의 합  (0) 2022.07.14