ยซ   2025/04   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Recent Posts
04-12 14:44

Today
Total

Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

์—ฐ์˜ ๊ธฐ๋ก ๐Ÿช

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] ์ž…๊ตญ์‹ฌ์‚ฌ ๋ณธ๋ฌธ

Problem Solving/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] ์ž…๊ตญ์‹ฌ์‚ฌ

kite707 2024. 9. 29. 15:53

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;
}