์ฐ์ ๊ธฐ๋ก ๐ช
[ํ๋ก๊ทธ๋๋จธ์ค/C++] ์ ๊ตญ์ฌ์ฌ ๋ณธ๋ฌธ
https://school.programmers.co.kr/learn/courses/30/lessons/43238
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์ ๋ถ์
๋ฌธ์ ์์ ์๊ตฌํ๋ ๊ฒ์ ๊ฐ ์ฌ์ฌ๊ด์ด ์ฌ์ฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ์ฌ๋์ ์๊ฐ ์ฃผ์ด์ก์ ๋, ๋ชจ๋๊ฐ ์ฌ์ฌ๋ฅผ ๋ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ต์๊ฐ์ ๊ตฌํ๋ ๊ฒ์ด๋ค.
๋ฌธ์ ์๊ตฌ์ฌํญ ์์ฒด๋ ๋ณต์กํ์ง ์์ง๋ง ๋ฌธ์ ๋ ์ ํ์ฌํญ์ด๋ค.
์
๊ตญ์ฌ์ฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ๋๋ ๋งค์ฐ ๋ง๊ณ , ๊ฐ ์ฌ์ฌ๊ด์ด ์ฌ์ฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๋ ์ปค์ ์ํ๋ฅผ ํด์ ๊ตฌํ๋ค๊ธฐ๋ณด๋ค๋ ๋๋๊ธฐ๋ก ๊ตฌํ ์๊ฐ์ ํด์ผํ๋ค.
์๋ฅผ๋ค์ด ์
๊ตญ ์ฌ์ฌ๊ด์ด ๊ฐ๊ฐ 5, 7๋ถ์ ํ๋ช
์ฉ ์ฌ์ฌ๋ฅผ ํ๋ค๊ณ ํ์ ๋ 100๋ถ๋์ ์ฌ์ฌํ ์ ์๋ ์ฌ๋์ 100/5+100/7 = 34๋ช
์ด๋ค.
์์ด๋์ด
์ด ๋ฌธ์ ์์ ์ฃผ๋ชฉํ ์ ์ ์ ๊ตญ ์ฌ์ฌ๋ฅผ ํ๋ ์๊ฐ์ด ๋์ด๋ ์๋ก ๋ ๋ง์ ์ฌ๋์ ์ฌ์ฌํ ์ ์๋ค๋ ์ ์ด๋ค. ์ฆ x์ถ์ ์ ๊ตญ์ฌ์ฌ ์๊ฐ, y์ถ์ ์ฌ์ฌํ ์ ์๋ ์ฌ๋์ ์๋ก ๋๋ค๋ฉด ์ฆ๊ฐํ๋ ๋ชจ์์๋ฅผ ๋ณด์ผ ๊ฒ์ด๋ค.
๊ทธ๋ํ์ ๋ชจ์์ ์ ๋ ๊ฒ ๊ทธ๋ฆฌ๊ธด ํ์ง๋ง ์ค์ํ ๊ฒ์ x๊ฐ ์ฆ๊ฐํ๋ฉด y๋ ์ฆ๊ฐํ๋ ๋ชจ์์ด๋ผ๋ ๊ฒ์ด๋ค. ์ฆ ์ด๋ถํ์์ ํตํด ์๊ฐ์ ์ชผ๊ฐ๊ฐ๋ฉฐ ์ฃผ์ด์ง n๋ช
์ ์ธ์์ ์ฌ์ฌํ ์ ์๋ ์ต์ ์ ์๊ฐ์ ์ฐพ์๋ผ ๊ฒ์ด๋ค.
์๋ฅผ๋ค์ด ์๋์ ๊ฐ์ ์
์ถ๋ ฅ์ด ์ฃผ์ด์ก์ ๋ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ค๊ฐ๊ฐ์ด ๋ช๋ช
์ ์ฌ์ฌํ ์ ์๋์ง ํ๋ณํ๋ค. ์ฌ๊ธฐ์๋ ์ต์ 1 ์ต๋ 100์ผ๋ก ๊ฐ์ ํ๊ฒ ๋ค.
์๋์ ๊ฐ์ด ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ์ ์ ํ ์กฐ์ ํ๋ฉฐ ์๋ง์ ๋ต์ ์ ํํด๊ฐ๋ฉด ๋๋ค.
์ฝ๋
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํ ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ mid๋ฅผ ๊ตฌํ๋ ์๊ณผ st์ en์ ๊ฐ์ ์ ์ ํ ์ค์ ํ๋ ๊ฒ์ด๋ค. ์ด๋ฐ ๊ฒ๋ค์ ๋ฌธ์ ๋ฅผ ์ฝ๊ณ ์ ํด๋๊ฐ์ผ ํ๋ค.
๋จผ์ mid์ ๊ฒฝ์ฐ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ต๋๊ฐ์ ๊ตฌํ๋ ค๋ฉด mid=(st+en+1)/2๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค. ๋ฐ๋๋ก ์ต์๊ฐ์ ๊ตฌํ๋ ค๋ฉด mid = st+en์ผ๋ก ์ค์ ํ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ st์ en์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ํด๋น ๊ฐ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง๋ฅผ ์ ์ดํผ๋ฉด ๋๋ค. ์๋ฅผ๋ค๋ฉด ์ ์์์์ 100๋ถ๋์ 6๋ช
์ ๊ฒ์ฌํ ์ ์๋ค. ๋ค๋ง "์ต์๊ฐ"์ด ์๋ ๋ฟ์ด๋ค. ๊ทธ๋ ๊ธฐ์ en=mid๋ก ์ด๊ธฐํ ํด์คฌ๋ค.
๋ฐ๋๋ก 25๋ถ๋์์ 6๋ช
์ ๊ฒ์ฌํ ์ ์๋ค. 6๋ณด๋ค ์์ ๋๋ st = mid+1๋ก ์ด๊ธฐํ ํด ์ฃผ์๋ค.
์ ์ฒด ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
long long solution(int n, vector<int> times) {
long long answer = 0;
long long a1=1000000000;
long long st=1;
long long en=a1*a1;
long long mid=(st+en)/2;
while(st!=en){
mid=(st+en)/2;
answer=0;
for(auto k:times){
answer+=mid/k;
}
if(answer>=n)en=mid;
else st=mid+1;
}
return st;
}
'Problem Solving > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ํํ ๊ฐ๋ฅํ ์ด์งํธ๋ฆฌ (C++) (0) | 2025.02.06 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๋๋๊ณผ ๋ง๋ ๊ทธ๋ํ (C++) (0) | 2025.01.15 |