코드 작성은 서툴지만
문제자체가 설명이 많이 부족하다고 느껴 글로 남겨봅니다
처음에 생각했던 방식은
다음에 끼울 플러그를 검사해서 넣고 빼고를 반복하는 방식이었고
두번째로는 뒤에 올 플러그들을 검사해서 빈도수가 가장 적은것부터
순서대로 빼는것으로 구현해보았는데
두가지 다 문제에서 요구하는것은 아니었습니다
결국 문제 요지는 가장 나중에 올 플러그를 빼고 그자리에 다음 플러그를 꽂는 것입니다
페이지교체 알고리즘과 비슷하다고 생각해서
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 |