[C++] BOJ 1561 - ๋์ด ๊ณต์Problem Solving/Baekjoon Online Judge (BOJ)2025. 4. 14. 16:28
Table of Contents

01. ๐ ๋ฌธ์ ํ์
INPUT
N: ์์ด๋ค์ ์ (1 <= N <= 2e9)
M: 1์ธ์น ๋์ด๊ธฐ๊ตฌ์ ์ (1 <= M <= 10,000)
๋์ด๊ธฐ๊ตฌ์ ์ดํ ์๊ฐ์ด ์์๋๋ก M๊ฐ๊ฐ ์ฃผ์ด์ง (์ดํ ์๊ฐ์ 1 ~ 30์ ๋ฒ์)
- ์ดํ ์๊ฐ์ด ์ง๋๋ฉด, ํ์น ์ค์ธ ์์ด๋ ๋ด๋ฆผ
- ๋์ด๊ธฐ๊ตฌ๊ฐ ๋น์์ผ๋ฉด ๊ฐ์ฅ ์์ ์๋ ์์ด๊ฐ ํ์น
- ์ฌ๋ฌ ๊ฐ๊ฐ ๋์์ ๋น์์ผ๋ฉด, ๋ ์์ ๋ฒํธ์ ๋์ด๊ธฐ๊ตฌ์ ๋จผ์ ํ์น
* ๋ง์ง๋ง ์์ด๊ฐ ํ์นํ๊ฒ ๋๋ ๋์ด๊ธฐ๊ตฌ์ ๋ฒํธ๋ฅผ ์ถ๋ ฅ
01-1. ๊ฐ๋ฅํ ์๊ฐ ๋ณต์ก๋
- ์์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์์๋๋ก ์ฒ๋ฆฌํ๋ ์๋ฎฌ๋ ์ด์ ์ ๊ฒฝ์ฐ, O(N * M)์ผ๋ก ์ต์ ์ ๊ฒฝ์ฐ, 1e4 * 2e9ํ ์ฐ์ฐ์ผ๋ก ์๊ฐ์ด๊ณผ
- ์ด๋ถ ํ์์ผ๋ก ํ์น ์๊ฐ์ ๊ณ์ฐํ์ฌ, ํน์ ์๊ฐ์ ๋ํ ์ด ํ์น ์ธ์์ ๊ณ์ฐํ ๊ฒฝ์ฐ, O(M log N)์ผ๋ก ์ต์ ์ ๊ฒฝ์ฐ์๋ ํต๊ณผ
01-2. ์๊ณ ๋ฆฌ์ฆ ์ ํ
- ์ด๋ถ ํ์์ ์ด์ฉํ์ฌ ํน์ ์๊ฐ์ ๊ตฌํจ (์ต๋ ์๊ฐ์ 30 * 2e9)
- ๋์จ ์๊ฐ์ ๋ฐํ์ผ๋ก ํด๋น ์๊ฐ์ ํ์นํ๊ฒ ๋ ์ด ์ธ์๊ณผ N๋ฒ์งธ ์์ด๊ฐ ๋ช ๋ฒ์งธ ๋์ด๊ธฐ๊ตฌ์ ํ์นํ ๊ฒ์ธ์ง ์ ์ ์์
02. ๐ ์ฝ๋ ์ค๊ณํ๊ธฐ
- N, M, v(๊ฐ ๋์ด๊ธฐ๊ตฌ์ ์ดํ ์๊ฐ์ ๋ด์ ๋ฐฐ์ด)์ ์ ๋ ฅ
- ํ์น ์๊ฐ์ ๋ํ์ฌ ์ด๋ถ ํ์ ์ํ
- ํด๋น ์๊ฐ์ ํ์นํ ์ ์๋ ์ด ์ธ์์ ๊ณ์ฐ
- ๋ง์ฝ, ์ด ์ธ์์ด N๋ณด๋ค ์์ ๊ฒฝ์ฐ, left๋ฅผ mid + 1๋ก ํ๊ณ ํ์์ ๊ณ์
- ์ด ์ธ์์ด N๋ณด๋ค ๊ฐ๊ฑฐ๋ ํด ๊ฒฝ์ฐ, right๋ฅผ mid - 1๋ก ํ๊ณ ํ์์ ๊ณ์
- ์ด๋ถ ํ์์ด ๋๋๋ฉด, (left-1 ์๊ฐ์ ์ด ์ธ์) < N <= (left ์๊ฐ์ ์ด ์ธ์) ์ด ๋์ด์์ ๊ฒ
- left-1 ์๊ฐ์ ์ด ์ธ์์ ์ ์ฅํ๊ณ , left ์๊ฐ์ ๋น์ด์๋ ๋์ด๊ธฐ๊ตฌ ๊ฐ์๋ฅผ ์๋ฉฐ, ์ด์ ์๊ฐ์ ์ด ์ธ์์ ๋ํด์ค
- ์ด์ ์๊ฐ์ ์ด ์ธ์์ด N์ด ๋์์ ๋, ํ์ฌ ํ์นํ๋ ๋์ด๊ธฐ๊ตฌ๊ฐ ๋ง์ง๋ง ์์ด๊ฐ ํ์นํ๊ฒ ๋ ๋์ด๊ธฐ๊ตฌ์ ๋ฒํธ
03. ๐ ๏ธ ์๋๋ณ ์์
1ํ์ฐจ
04. ๐๏ธ ์ ๋ต ์ฝ๋
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int N, M;
vector<int> v(1e4+1);
ll get_count(ll t){
if(t < 0) return 0;
ll count = M;
for(int i = 1; i <= M; i++) count += (t / v[i]);
return count;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
for(int i = 1; i <= M; i++) cin >> v[i];
ll left = 0, right = 30*(2e9);
while(left <= right){
ll mid = (left + right) / 2;
ll count = get_count(mid);
if(count >= N) right = mid - 1;
else left = mid + 1;
}
ll prev_count = get_count(left - 1);
for(int i = 1; i <= M; i++){
if(left % v[i] == 0){
if(++prev_count == N) cout << i << "\n";
}
}
return 0;
}'Problem Solving > Baekjoon Online Judge (BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [C++] BOJ 14890 - ๊ฒฝ์ฌ๋ก (0) | 2025.04.16 |
|---|---|
| [C++] BOJ 14499 - ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (1) | 2025.04.15 |
| [C++] BOJ 12015 - ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด 2 (0) | 2025.04.13 |
| [C++] BOJ 2473 - ์ธ ์ฉ์ก (0) | 2025.04.12 |
| [C++] BOJ 1477 - ํด๊ฒ์ ์ธ์ฐ๊ธฐ (0) | 2025.04.11 |
@ONE_ :: ์ ํธ์
์๋ชป๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด ๋ง์ํด์ฃผ์ธ์!