1713번: 후보 추천하기
첫째 줄에는 사진틀의 개수 N이 주어진다. (1≤N≤20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대로 �
www.acmicpc.net
[문제 풀이]
단순 구현을 통해 문제를 해결했습니다.
이 문제의 경우 스케줄러를 구현하는 것과 비슷한 형태였습니다.
문제를 해결하기 위해 사진틀을 map을 통해 구현하였습니다.
N(사진틀)의 범위가 20 이하이므로 추천 횟수 하나마다 map을 순회하는 형식으로 구현하였습니다.
[코드]
#include<iostream>
#include<map>
using namespace std;
map<int, pair<int, int>> LRU;
int N, M;
int main() {
scanf("%d %d", &N, &M);
for (int i = 1; i <= M; i++) {
int temp;
scanf("%d", &temp);
if (LRU.find(temp) == LRU.end()) {
if (LRU.size() < N) {//사진틀이 N보다 작은 경우
LRU[temp].first = 1;
LRU[temp].second = i;
}
else {
pair<int, int> record;
int index = LRU.begin() -> first;
record = LRU.begin() -> second;
for (auto item : LRU) {
if (item.second < record) {
index = item.first;
record = item.second;
}
}
LRU.erase(index);
LRU[temp].first = 1;
LRU[temp].second = i;
}
}
else {
LRU[temp].first++;
}
}
for (auto item : LRU) {
printf("%d ", item.first);
}
return 0;
}
'algorithm > BOJ' 카테고리의 다른 글
백준 3055_암호만들기(C++) (0) | 2020.09.29 |
---|---|
백준 3055_탈출(C++) (0) | 2020.09.28 |
백준 1920_수 찾기(C++) (0) | 2020.09.22 |
백준 10942_팰린드롬?(C++) (0) | 2020.06.28 |
백준 14889_랜선 자르기(C++) (0) | 2020.06.07 |