๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[C++/PGS] Lv.4 : ์ง•๊ฒ€๋‹ค๋ฆฌ (์ด๋ถ„ํƒ์ƒ‰)

by xxilliant 2025. 5. 3.
728x90
๋ฐ˜์‘ํ˜•

 

https://school.programmers.co.kr/learn/courses/30/lessons/43236

 

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

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ ˆ๋ฒจ 4.

์†Œ์š”์‹œ๊ฐ„ ์•ฝ 50๋ถ„

์ด์ง„ํƒ์ƒ‰์„ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ

 

์–ด๋–ค ๊ฐ’์„ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ์ฐพ์„ ๊ฑด์ง€ ๊ฒฐ์ •ํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋‹ค!!!

๋ชฉํ‘œ๊ฐ’๋งŒ ์ฐพ์œผ๋ฉด ์ด์ œ ๋กœ์ง์€ ์–ด๋ ต์ง€ ์•Š์€๋“ฏ ใ…Ž.ใ…Ž

 

์ด ์ง•๊ฒ€๋‹ค๋ฆฌ ๋ฌธ์ œ์—์„œ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์•„์•ผ ํ•˜๋ฏ€๋กœ (๊ฑฐ๋ฆฌ์˜ ์ตœ์†Ÿ๊ฐ’ ์ค‘์— ๊ฐ€์žฅ ํฐ ๊ฐ’)

1. left ์‹œ์ž‘์ ์€ 0, right ๋์ ์€ distance๋กœ ๋‘๊ณ 

2. mid ๊ฐ’์„ ์ •๋‹ต์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด์„œ

3. ์ด ๋•Œ ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋Š” ๋Œ์˜ ์ˆ˜๋ฅผ n๊ณผ ๋น„๊ตํ•œ๋‹ค.

4. ๊ฐ€๋Šฅํ•œ ๊ฑฐ๋ฆฌ ๊ฐ’ ์ค‘ ์ตœ๋Œ€๊ฐ’์„ ์ฐพ์•„์•ผ ํ•˜๋ฏ€๋กœ, ๋ฐ”์œ„๋ฅผ n๊ฐœ ์ดํ•˜๋กœ ์ œ๊ฑฐํ•˜๋ฉด ๋  ๋•Œ์˜ mid ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

5. ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋Š” ๋Œ์ด n๋ณด๋‹ค ๋” ๋งŽ๋‹ค๋ฉด, mid๊ฐ€ ๋„ˆ๋ฌด ํฐ ์ƒํ™ฉ์ด๋ฏ€๋กœ mid๋ฅผ ์ค„์—ฌ์•ผ ํ•จ.

6. ์ œ๊ฑฐํ•  ๋Œ์ด n๋ณด๋‹ค ์ ๋‹ค๋ฉด, mid๊ฐ€ ์ž‘์•„์„œ ๋„๋„ํ•œ ์ƒํ™ฉ์ด๋ฏ€๋กœ ๋Š˜๋ ค์•ผ ํ•จ

 

โ€ผ๏ธ 4๋ฒˆ ๋ถ€์—ฐ์„ค๋ช…

if (removeCnt == n)์ด ์•„๋‹ˆ๋ผ if (removeCnt <= n)์ผ ๋•Œ, ๋‹ต์„ ๊ฐฑ์‹ ํ•ด์•ผ ํ•˜๋Š” ์ด์œ !!!

๋ฐ”์œ„๋ฅผ ๋”ฑ n๊ฐœ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๋งŒ ์ •๋‹ต ํ›„๋ณด๋กœ ์‚ผ๋Š”๋‹ค๋ฉด,

๋” ํฐ mid ๊ฐ’์œผ๋กœ n๊ฐœ ์ดํ•˜๋ฅผ ์ œ๊ฑฐํ•˜๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ์„ ๋†“์น˜๊ฒŒ ๋จ (์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” mid์˜ ์ตœ๋Œ“๊ฐ’์ด๋ฏ€๋กœ)

 

 

๋‚˜์˜ ํ’€์ด

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

int solution(int distance, vector<int> rocks, int n) {
    int answer = 0;
    sort(rocks.begin(), rocks.end());
    // ์ตœ์†Œ ๊ฑฐ๋ฆฌ ์ด๋ถ„ํƒ์ƒ‰, ๊ฑฐ๋ฆฌ๊ฐ€ mid๋ณด๋‹ค ๋” ์ž‘์œผ๋ฉด ๋ฐ”์œ„๋ฅผ ์ œ๊ฑฐํ•ด์•ผํ•จ
    // ์ œ๊ฑฐํ•ด์•ผ ํ•˜๋Š” ๋ฐ”์œ„์˜ ์ˆ˜๋ฅผ n๊ณผ ๋น„๊ตํ•˜๊ธฐ
    int left = 0;
    int right = distance;
    int mid = (left+right)/2; // mid๋กœ ๊ฑฐ๋ฆฌ์˜ ์ตœ์†Ÿ๊ฐ’ ์ค‘ ์ตœ๋Œ€๊ฐ’ ์ฐพ๊ธฐ
    rocks.push_back(distance); // ๋„์ฐฉ ์ง€์ ๋„ ํฌํ•จ
    while(left<=right){
        int removeCnt = 0;
        // ์ œ๊ฑฐํ•  ๋ฐ”์œ„ ์ˆ˜ ์นด์šดํŠธ
        int prev = 0; // ์ด์ „ ์œ„์น˜๋ฅผ ๊ธฐ์–ต
        for(int i=0; i<rocks.size(); ++i){
            if(rocks[i]-prev < mid){ // ์ œ๊ฑฐํ•˜๋ฉด ์ด์ „ ์œ„์น˜๋Š” ๊ทธ๋Œ€๋กœ.
                removeCnt++;
            }
            else prev = rocks[i]; // ์ œ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉด, ์ด์ „ ์œ„์น˜๋ฅผ ํ˜„์žฌ์œ„์น˜๋กœ ๊ฐฑ์‹ 
        }
        if(removeCnt<=n) {
            if(answer<mid) answer = mid;
        }
        // ์ œ๊ฑฐํ•  ์ˆ˜๊ฐ€ ์ ์œผ๋ฉด, ์ตœ์†Ÿ๊ฐ’์„ ๋Š˜๋ฆฌ๊ธฐ
        if(removeCnt <= n) left = mid+1;
        else right = mid-1;
        mid = (left+right)/2;
    }
    return answer;
}

 

728x90
๋ฐ˜์‘ํ˜•