티스토리 뷰
참고) 32bit integer 이내 답이다 가 들어갈시에 만약 최소값의 범위를 잡을시 그냥 큰값이 아닌 99999999999999999와 같이 정말로 엄청나게 큰 수를 넣는다
#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
//우선순위 큐
//방법 3가지
//1. 배열 기반
//2. 연결리스트 기반
//3. 힙 기반 - min heap 기준
//int가 안되서 longlong으로 바꿈
queue<long long> arr[101];
int result[101];
int main() {
int K, N;
scanf("%d %d", &K, &N);
int a;
for (int i = 0; i < K; i++) {
scanf("%d", &a);
arr[i].push(a);
result[i] = a;
} // 자료 받기
long long v=0; // 최소 비교값
int index = 0;//최소값인 곳
for (int i = 0; i < N; i++) {
// 최소값 비교해서 먼저 보내고
v = 9999999999999999;
index = 0;
for (int j = 0; j < K; j++) {
long long temp=0;
if (!arr[j].empty())
temp = arr[j].front();
else
temp = 9999999999999999;
//printf("%lld\n", temp);
// 나갈값 찾기 - 최소값
if (v > temp) {
v = temp;
index = j;
} // k 개수 만큼 돌면서 최소값 찾기 즉, 최소값을 트리의 맨 위로 올리는 느낌
}
//printf("\n");
//새로운 값 추가하고
for (int c = 0; c < K; c++) {
if (c == index) { // 최소값이 맞다면 새로운값 추가
arr[c].pop();
arr[c].push(v*result[c]);
}
else if (c > index)
arr[c].push(v*result[c]);
}
}
printf("%lld\n", v);
return 0;
}
'프로그래밍 > 알고리즘' 카테고리의 다른 글
방속의 거울 문제(codeground) (0) | 2016.11.26 |
---|---|
편집 거리 알고리즘 및 LCS문제 (0) | 2016.11.26 |
위상정렬로 문제풀기 (0) | 2016.11.22 |
우선순위큐 (0) | 2016.11.21 |
히스토그램에서 가장 큰 직사각형(분할 정복법) (0) | 2016.11.09 |