์ฝ”๋”ฉํ…Œ์ŠคํŠธ/์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต

[C++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 2019 ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ๊ฒจ์šธ ์ธํ„ด์‹ญ - ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ

Bradbury 2020. 10. 28. 09:24
728x90

(2์‹œ๊ฐ„) ์ •ํ™•์„ฑ์€ ์‰ฌ์šด๋ฐ ๋„์ €ํžˆ ํšจ์œจ์„ฑ ์˜ฌ๋ฆด ์•„์ด๋””์–ด๊ฐ€ ์•ˆ๋– ์˜ฌ๋ผ์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค. ใ…‹ใ…‹ ์ด๋ถ„ํƒ์ƒ‰ ์“ธ ์ƒ๊ฐ์กฐ์ฐจ ๋ชปํ–ˆ๋‹ค...

 

์ •ํ™•์„ฑ๋งŒ ๋งž์€ ๋ฐฉ๋ฒ•(1๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์นด์šดํŒ…)

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> stones, int k) {
    int answer = 0;
    bool check = true;
    while(check){
        int step = 0;
        for(int i=0; i<stones.size(); i++){
            if(stones[i] != 0){
                stones[i]--;
                step = 0;
            }else{
                step++;
                if(step == k){
                    check = false;
                    break;
                }
            }
        }
        
        if(check){
            answer++;
        }
    }
     
    return answer;
}

 

์ •ํ™•์„ฑ ํšจ์œจ์„ฑ(1๋ถ€ํ„ฐ 200000000๊นŒ์ง€ ๋ฒ”์œ„์—์„œ ์ด๋ถ„ํƒ์ƒ‰)

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool crossStones(int num, int k, vector<int> stones){
    int step = 0;
    for(int i=0; i<stones.size(); i++){
        if(stones[i] - num > 0){
            step = 0;
        }else{
            step++;
            if(step == k) return false;
        }
    }
    return true;
}

int solution(vector<int> stones, int k) {
    int left = 1;
    int right = 200000000;
    while(left <= right){
        int mid = (left + right) / 2;
        if(crossStones(mid, k, stones)){
            left = mid + 1;
        }else{
            right = mid - 1;
        }
    }

    return left;
}
728x90