n ๋ช ์ ์ฌ๋๋ค์ด times ๋ฐฐ์ด์ ํฌ๊ธฐ๋งํผ์ ์ ๊ตญ ์ฌ์ฌ๋ฅผ ๊ฐ์ฅ ๋นจ๋ฆฌ ํต๊ณผํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํ๋ ๋ฌธ์ ์ด๋ค. ๋ณด์๋ง์ while ๋ฌธ ์์์ sec๋ฅผ ํ๋์ฉ ์ฆ๊ฐํด์ฃผ๊ณ ์นด์ดํธ๋ฅผ ํด์ฃผ๋ฉด์ ๋ง์ง๋ง ํ ๋ช ์ด ๋จ์์ ๋ ์ด๋ ์ ๊ตญ ์ฌ์ฌ๋๋ฅผ ํต๊ณผํด์ผ ๊ฐ์ฅ ์งง์ ์๊ฐ์ด ๋์ฌ ์ ์๋์ง ์ฐพ์ ์ ์๋ค๊ณ ์๊ฐํด์ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
๋ค์์ ํ ์คํธ ์ผ์ด์ค ํ๋๋ฅผ ํต๊ณผํ ์ฝ๋ ์์ฑ์ด๋ค.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
long long solution(int n, vector<int> times) {
long long answer = 0;
int sec = 0;
int sum = 0;
long long min = 1000000001;
int member = 0;
vector<int> count(times.size(), 0);
while(true) {
if(member == n) break;
for(int i = 0 ; i < times.size() ; i++) {
if(sec % times[i] == 0) {
count[i]++;
member++;
if(member == n) {
for(int i = 0 ; i < times.size() ; i++) {
if(sec % times[i] != 0) {
if(min > (count[i]+1) * times[i]) {
min = (count[i]+1) * times[i]-1;
}
} else {
if(min > sec + times[i]) {
min = sec + times[i]-1;
sec--;
}
}
}
sec = min;
}
}
}
// cout << member << " ";
sec++;
}
answer = sec;
return answer;
}
์ด๋ถ ํ์์ ํ์ง ์๊ณ ์์ฐจ์ ์ผ๋ก ์ด๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๋๊ฐ ๋ค์ด๊ฐ ์ ์๋ ์ง๋ฅผ ๊ณ ๋ คํ๋ค. ํ์ง๋ง ์ด๋ ์ ๊ตญ์ฌ์ฌ๋์ ๊ฐ์๊ฐ 3๊ฐ ์ด์์ด ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ฒด์ ์ผ๋ก ๊ณ ๋ คํ์ง ๋ชปํ ์ฝ๋ ์์ฑ์ด๋ค. ์ข ๋ ๋ณดํธ์ ์ผ๋ก ์ ์ฉ๋ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
์ต์ ์๊ฐ์ ์ด๋ถ ํ์์ผ๋ก Max์ Min์ ์ค์ฌ๋๊ฐ๋ฉด์ ์ฐพ๋ ๋ฐฉ๋ฒ์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํจ์จ์ ์ผ๋ก ๊ณ ๋ คํ ๊ฒฝ์ฐ๊ฐ ๋๊ฒ ๋ค. ์ด ์๊ฐ์ ์ด๋ป๊ฒ ํด์ผ ํ ๊น. ๋งจ ์ฒ์ ์ด ๋ฌธ์ ๋ฅผ ๋ดค์ ๋ ๋ฌผ์ด๋ณด๋ ๊ฒ์ด ์ต๋จ ์๊ฐ์ด์๊ณ , ํ ... ์ด๋ป๊ฒ ์ ๊ทผํ ์ง ์์ง ๊ฐ์ด ์์จ๋ค... ์ข ๋ ๋ฌธ์ ๋ฅผ ํ์ด๋ด์ผ ๊ฐ์ด ์ฌ ๊ฒ ๊ฐ๋ค..
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
long long solution(int n, vector<int> times) {
long long answer = 0;
// ์
๊ตญ ์ฌ์ฌ๋์ ์๊ฐ ์์์ ๋ฐ๋ผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ์ ํ๋ค.
sort(times.begin(), times.end());
// ์ ์ผ ์์ ์๊ฐ ์ด
long long min = 1;
// ๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ์ ์ผ ๊ธธ๊ฒ ๊ฑธ๋ฆฌ๋ ์ฌ์ฌ๋์ n๋ช
์ด ๊ฐ์ ๊ฒ์ฌ๋ฅผ ํ๋ ๊ฒฝ์ฐ
long long max = n * (long long)times.back();
// Binary Search ์ ๊ฐ๋
์ ์ ์ฉํ์ฌ ๊ต์ฐจ๋๋ ์๊ฐ while ๋ฌธ์ ์ข
๋ฃ
while (min <= max) {
// ํ๊ท ์ ๋จผ์ ๊ณ์ฐ์ ํ๋ค
long long avg = (max + min) / 2;
long long tmp = 0;
// ๊ฐ ์ฌ์ฌ๋๊ฐ ํ๊ท ์๊ฐ ๋ด์ ์ฒ๋ฆฌํ ์ ์๋ ์ฌ๋์ ์ธ์ ๋ชจ๋ ๋ํด์ค๋ค.
for (int i = 0; i < times.size(); i++) {
tmp += (avg / (long long) times[i]);
}
// ๋ง์ฝ ์ฒ๋ฆฌํ ์ ์๋ ์ฌ๋์ด n๋ช
๋ณด๋ค ๋ง๊ฑฐ๋ ๊ฐ์ผ๋ฉด max๋ฅผ avg๋ณด๋ค 1์ด ์๊ฒ ์ค์ ํ๋ค.
if (tmp >= n) {
max = avg - 1;
answer = avg;
}
else min = avg + 1;
}
return answer;
}