https://www.acmicpc.net/problem/17179
๋ฌธ์
์์ผ์ ๋ง์ดํ ์ฃผ์ฑ์ด๊ฐ ์์ผ ํํฐ๋ฅผ ์ค๋นํ๋ ค๊ณ ํ๋ค. ์ฃผ์ฑ์ด๋ ์ผ๋ฐ ์ผ์ดํฌ ๋์ ํ์ ์ข์ํ๋ ๋กค ์ผ์ดํฌ๋ฅผ ์ค๋นํ๋ค. ๋กค ์ผ์ดํฌ์๋ ์ฅ์์ด ์กด์ฌํด์ ํน์ ์์น์์๋ง ์๋ฅผ ์ ์๋ค. ์ฃผ์ฑ์ด๋ ๋กค ์ผ์ดํฌ ์กฐ๊ฐ์ ํํฐ์ ์ฌ ์น๊ตฌ์ ์ ๋งํผ ์ค๋นํ๊ณ ์ถ์ด์, ๊ฐ์ฅ ์์ ์กฐ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์์๋ณด๊ธฐ๋ก ํ๋ค. ํ์ง๋ง ์ง๊ถ์ ์ฃผ์ฑ์ด์ ์น๊ตฌ๋ค์ ์์ผํํฐ์ ๋ช ๋ช ์ด ์ฐธ์ํ๋์ง ์ง์ ์ ์ผ๋ก ์๋ ค์ฃผ์ง๋ฅผ ์๋๋ค. ๊ทธ๋์ ๋ช ๊ฐ์ ์๋ฅผ ๋ชฉ๋ก์ ์ ์ด, ๊ฐ ์๋งํผ ์กฐ๊ฐ์ ๋ง๋ค์์ ๋ ๊ฐ์ฅ ์์ ์กฐ๊ฐ์ ๊ธธ์ด์ ์ต๋๊ฐ์ ๊ตฌํ๋ ค๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด 70cm์ ๋กค ์ผ์ดํฌ์ ์๋ฅผ ์ ์๋ ์ง์ ์ด 5๊ตฐ๋ฐ(10cm, 20cm, 35cm, 55cm, 60cm)๊ฐ ์๋ค๊ณ ํ์. ๋ง์ฝ ๋ชฉ๋ก์ ์ ํ ์ ์ค ํ๋๊ฐ 3์ด๋ผ๋ฉด ์ด๋ ๊ฐ์ฅ ์์ ์กฐ๊ฐ์ ๊ธธ์ด๋ ์ต๋ 15cm์ด๋ค. ์๋ฅผ ๋ค์ด 20cm, 35cm, 55cm ์ง์ ์ ์๋ฅผ ๋ ์ต๋๊ฐ ๋๋ค.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ์๋ฅด๋ ํ์๊ฐ ๋ด๊ธด ๋ชฉ๋ก์ ๊ธธ์ด N๊ณผ ์๋ฅผ ์ ์๋ ์ง์ ์ ๊ฐ์ M, ๊ทธ๋ฆฌ๊ณ ๋กค ์ผ์ดํฌ์ ๊ธธ์ด์ธ ์ ์ L์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ M ≤ 1,000, 1 < L ≤ 4,000,000)
๋ค์ M์ค์ ๊ฑธ์ณ ์๋ฅผ ์ ์๋ ์ง์ ์ ๋ํ๋ด๋ ์ ์ Si๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ Si < L)
๋ค์ N์ค์ ๊ฑธ์ณ ์๋ฅด๋ ํ์๋ฅผ ๋ํ๋ด๋ ์ ์ Qi๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ Qi ≤ M)
Si๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ฃผ์ด์ง๊ณ ์ค๋ณต๋๋ ์๋ ์์ผ๋ฉฐ, Qi๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
์ถ๋ ฅ
N๊ฐ ์ค์ ๊ฑธ์ณ ๊ฐ ๋ชฉ๋ก์ ์๋ ํ์๋๋ก ๋กค ์ผ์ดํฌ๋ฅผ ์๋์ ๋ ๊ฐ์ฅ ์์ ์กฐ๊ฐ์ ๊ธธ์ด์ ์ต๋๊ฐ์ ์ถ๋ ฅํ๋ค.
๊ณจ๋ 5 ์ด์งํ์ ๋ฌธ์ .
์ผ์ดํฌ ์กฐ๊ฐ์ ๊ธธ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก left, mid, right์ ์ ํ๋ค.
์ด๋ mid ๋ ๊ตฌํ๋ ค๋ ๊ฐ์ฅ ์์ ์ผ์ดํฌ ์กฐ๊ฐ์ ๊ธธ์ด์ด๊ณ , ์ด mid์ ์ต๋๊ฐ์ ๊ตฌํ๋ฉด ๋๋ ๋ฌธ์ .
์ฒ์์ n์ด ์กฐ๊ฐ ์์ธ์ค ์๊ณ ํ์๋ค๊ฐ ํ๋ ธ์
์กฐ๊ฐ ์๊ฐ ์๋๋ผ ์๋ฅด๋ ํ์๋ผ์ for ๋ฌธ ๋๋ ํ์ cut++๋ฅผ ํด์ค ํ์๊ฐ ์์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ์๋ฅธ ํ์๊ฐ ๋์ผํด๋, ๋ง์ง๋ง ์กฐ๊ฐ์ด mid๋ณด๋ค ์ปค์ผํ๊ธฐ ๋๋ฌธ์ ์๋์ ์กฐ๊ฑด๋ฌธ์ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
if(tmp == cut && l-cutted < mid)
๊ทผ๋ฐ ์ด๋ถํ์ ๋ฌธ์ ํ๋ ๊ณ์ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด
์์ 43๋ฒ์งธ ~ 48๋ฒ์งธ ์กฐ๊ฑด๋ฌธ์์ left, right ๊ฐ ์ ํด์ค๋
43๋ฒ์งธ ์ค ์ฝ๋์์
cut < tmp
์ด๋ ๊ฒ ํด์ ํธ๋๊ฑฐ๋
cut <= tmp
์ด๋ ๊ฒ ํธ๋๊ฒ ๋ต์ด ๋ค๋ฅด๊ฒ ๋์ค๋๋ฐ....์๊ทธ๋ฐ์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค
=์ ๋ถ์ด๋ ๊ธฐ์ค์ด ๋ญ์ง.. ์ด๋์ ๊ฐ๋ค๋ถ์ฌ์ผํ๋์ง ์์ง ํท๊ฐ๋ฆผ
๋์ ํ์ด
#include <iostream>
#include <vector>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
int m;
int l;
vector<int> s;
int tmp;
cin >> n >> m >> l;
for (int i = 0; i < m; ++i) {
cin >> tmp;
s.push_back(tmp);
}
for (int i = 0; i < n; ++i){
cin >> tmp;
int left = 0; // ์กฐ๊ฐ ๊ธธ์ด๋ฅผ ์์๋ด๋ ๊ฒ์ด๋ฏ๋ก ์กฐ๊ฐ ๊ธธ์ด ๊ธฐ์ค
int right = l;
int mid; // ์ต์ ์กฐ๊ฐ๊ธธ์ด์ ์ต๋๊ฐ
while (left <= right){
mid = (left + right) / 2;
int cut = 0;
int cutted = 0;
for (int i = 0; i < m; ++i){
if (s[i] - cutted >= mid){
cut++;
cutted = s[i];
}
}
// cut++; // ์กฐ๊ฐ ์๊ฐ ์๋๋ผ ์๋ฅธํ์์
if(tmp == cut && l-cutted < mid) {// ๊ฐ์๋ ๋ง์ง๋ง ์กฐ๊ฐ์ด mid๋ณด๋ค ์ปค์ผํ๋๋ฐ ์์ผ๋ฉด
right = mid - 1;
}
else if (cut < tmp){
right = mid - 1;
}
else{
left = mid + 1;
}
}
// cout << left << " "<< mid<<" "<< right<< '\n';
cout << right << "\n";
}
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 21608 : ์์ด ์ด๋ฑํ๊ต (์๋ฎฌ๋ ์ด์ ) (0) | 2023.04.05 |
---|---|
[C++/BOJ] 21318 : ํผ์๋ ธ ์ฒด์กฐ (๋์ ํฉ) (0) | 2023.04.02 |
[C++/BOJ] 2343 : ๊ธฐํ ๋ ์จ (์ด์งํ์) / ์์ (0) | 2023.03.28 |
[C++/BOJ] 5549 : ํ์ฑ ํ์ฌ (๋์ ํฉ) / ์ฝ์ง ๊ธฐ๋ก (0) | 2023.03.28 |
[C++/BOJ] 13423 : Three Dots (์ด์งํ์) / ์ฝ์ง ๊ธฐ๋ก (0) | 2023.03.27 |