๋ฌธ์ :
๋ถ์ :
ํ๋ ๋ชฐ๋๋๋ฐ ์์ ๋ผ์ฐํฐ ๋ฌธ์ ์ ๋น์ทํ ๋ฐฉ์์ ๋ฌธ์ ๋ค!!
์๊ฐํ ํ๋ฆฐ ๋ฐฉ๋ฒ :
for๋ฌธ์ ํ๋ฒ์ฉ ๋๋๋ง๋ค ๊ฐ์ฅ ๊ฐ๊ฒฉ์ด ํฐ ํด๊ฒ์ ์ง์ ์ ๋ฐ์ผ๋ก ๋๋ ๊ทธ ์ง์ ์ ํด๊ฒ์๋ฅผ ์ธ์ด๋ค.
//
// 1477_rest.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/04/05.
//
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int already, will, dis;
int min_num = 0;
vector<int> v;
void set_rest(){
int tmp_min = 0, tmp_idx;
int tmp_tmp_idx = 0;
while(will--){
sort(v.begin(), v.end());
for(int i = 1; i < (int)v.size(); i++){
if(tmp_min < (v.at(i) - v.at(i - 1))){
tmp_min = v.at(i) - v.at(i - 1);
tmp_tmp_idx = v.at(i - 1) + v.at(i);
}
}
tmp_idx = tmp_min / 2;
tmp_min = 0;
v.push_back(tmp_tmp_idx/2);
}
sort(v.begin(), v.end());
for(int i = 1; i < (int)v.size(); i++){
if(min_num < (v.at(i) - v.at(i - 1))){
min_num = v.at(i) - v.at(i - 1);
}
}
}
int main(){
cin >> already >> will >> dis;
v.push_back(0);
for(int i = 0; i < already; i++){
int temp;
cin >>temp;
v.push_back(temp);
}
v.push_back(dis);
set_rest();
return 0;
}
ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด ์๋๋๊ฒ ์ง์ ์ ํด๊ฒ์๊ฐ ์ฌ๋ฌ๊ฐ ๋ค์ด๊ฐ ์ ์๋ค๋ ์ !
์๋ฅผ ๋ค์ด {0, 300, 500} ์ ํด๊ฒ์ ๋๊ฐ๋ฅผ ์ธ์ฐ๊ณ ์ถ์ ๋ -> {0, 150, 300, 400, 500}๋ ๋์ง๋ง {0, 100, 200, 300, 500}์ผ๋ก ๋๋์ด์ง ์๋ ์๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ ๊ฒ ํ๋ฉด ์๋๊ณ ์ด์ง ํ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํด์ผ ํ๋ ๊ฒ ๊ฐ๋ค.
๋ค๋ฅธ ๋ธ๋ก๊ทธ ๊ธ๋ค ๋ณด๋ฉด n์ด ์์ ๊ผญ ์ด์ง ํ์์ผ๋ก ํ์ง ์์๋ ๋๋ค ํ๋๋ฐ ๋๋ ์ด์ง ํ์ ๋ฐฉ๋ฒ์ผ๋ก ํ๊ณ ์ ํ์๋ค.
0, dist๋ฅผ ๋๋ฒ์งธ์ค ์์ ์ , ๋ ๋ฒกํฐ์ ๋ฃ์ด์ฃผ๊ณ
left์ right๋ฅผ ์ก์์ค๋ค.
mid๋ ์๋กญ๊ฒ ์ธ์ธ ํด๊ฒ์์ ์์น๋ค.
๊ทธ๋ฆฌ๊ณ rest๋ ๋ ํด๊ฒ์ ์ฌ์ด ์ธ์ธ ์ ์๋ ํธ์์ ์ ๊ฐ์๋ฅผ ์๋ฏธํ๋ฉฐ ์ด๊ฒ์ด ์ธ์ฐ๊ธฐ๋กํ ํธ์์ ๊ฐ์๋ณด๋ค ๋ง๋ค๋ฉด left๋ฅผ mid + 1ํ์ฌ ๊ฐ๊ฒฉ์ ์ค์ธ๋ค.
๋ฐ๋ค๋ก ์ธ์ฐ๊ณ ์ ํ ํธ์์ ์ ๊ฐ์๋ณด๋ค ์ ๋ค๋ฉด right๋ฅผ mid - 1 ํ์ฌ ๊ฐ๊ฒฉ์ ๋๋ฆฌ๋ ๊ฒ์ด๋ค.
c++ ์ฝ๋ :
//
// 1477_rest.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/04/05.
//
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int already, will, dis;
int min_num = 0;
vector<int> v;
void set_rest(){
sort(v.begin(), v.end());
int left = 1; int right = dis;
while(left <= right){
int mid = (left + right)/2;
int rest = 0;
for(int i = 1; i < (int)v.size(); i++){
//0์ด ๋๋์ด ๋จ์ด์ง๋ฉด ๊ธฐ์กด์ ์๋ ์์น์ ๋ค์ ์ธ์ฐ๋ ๊ฒ์ด๋ฏ๋ก
if((v.at(i) - v.at(i - 1)) % mid == 0){
rest += (v.at(i) - v.at(i - 1) - 1)/ mid;
}else{
rest += (v.at(i) - v.at(i - 1))/ mid;
}
}
if(rest > will) left = mid + 1;
else right = mid - 1;
}
cout << left << '\n';
}
int main(){
cin >> already >> will >> dis;
v.push_back(0);
for(int i = 0; i < already; i++){
int temp;
cin >>temp;
v.push_back(temp);
}
v.push_back(dis);
set_rest();
return 0;
}
'Algorithm๐ฐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1110 ๋ํ๊ธฐ ์ฌ์ดํด string (0) | 2021.04.21 |
---|---|
[๋ฐฑ์ค] 2309 ์ผ๊ณฑ ๋์์ด backtracking (0) | 2021.04.06 |
[๋ฐฑ์ค] ์น์ฆ 2636 bfs (0) | 2021.04.02 |
[๋ฐฑ์ค] 14502 ์ฐ๊ตฌ์ bfs (0) | 2021.04.01 |
[๋ฐฑ์ค] 11779 ์ต์ ๋น์ฉ ๊ตฌํ๊ธฐ2 dijkstra (0) | 2021.03.10 |
๋๊ธ