๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/2๋‹จ๊ณ„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv2] : ๊ธฐ๋Šฅ๊ฐœ๋ฐœ

by Jaeguk 2022. 6. 15.
๋ฌธ์ œ ๋งํฌ

https://programmers.co.kr/learn/courses/30/lessons/42586

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ธฐ๋Šฅ๊ฐœ๋ฐœ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํŒ€์—์„œ๋Š” ๊ธฐ๋Šฅ ๊ฐœ์„  ์ž‘์—…์„ ์ˆ˜ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ๋Šฅ์€ ์ง„๋„๊ฐ€ 100%์ผ ๋•Œ ์„œ๋น„์Šค์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜, ๊ฐ ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœ์†๋„๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์— ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์•ž์— ์žˆ๋Š”

programmers.co.kr

๋ฐฐํฌ๋˜์–ด์•ผํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ํ˜„์žฌ ์ž‘์—…์˜ ์ง„๋„๊ฐ€ ์ ํžŒ ๋ฐฐ์—ด๊ณผ, ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ ํžŒ ๋ฐฐ์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ

๊ฐ ๋ฐฐํฌ๋•Œ ๋ช‡ ๊ฐœ์˜ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜๋Š”์ง€ ๋ฆฌํ„ดํ•˜๋Š” ๋ฌธ์ œ.

 

ํ’€์ด
  • ํ’€์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฐํฌ ๋˜์–ด์•ผํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์ด ์ฃผ์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ๊ธฐ๋Šฅ์„ ์ฒ˜์Œ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ๋ฐฐํฌ๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.

๋งŒ์•ฝ i๋ฒˆ์งธ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜๋Š”๋ฐ 5์ผ์ด ์†Œ์š”๋œ๋‹ค๊ณ  ํ•˜์ž, i๋ฒˆ์งธ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜์—ˆ์„ ๋•Œ๋Š” 5์ผ์ด ์ง€๋‚œ ์‹œ์ ์ผ ๊ฒƒ์ด๋‹ค. ์ด๋•Œ i+1๋ฒˆ์งธ ๊ธฐ๋Šฅ์ด 5์ผ๋ณด๋‹ค ์งง๊ฒŒ ๊ฑธ๋ ค ๊ฐœ๋ฐœ์ด ๋˜์—ˆ๋‹ค๊ณ ํ•˜๋ฉด i๋ฒˆ์งธ ๊ธฐ๋Šฅ์ด ์ถœ์‹œ๋  ๋•Œ ๊ฐ™์ด ์ถœ์‹œ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ i+2๋ฒˆ์งธ๋„ 5์ผ๋ณด๋‹ค ์งง๊ฒŒ ๊ฑธ๋ฆฐ๋‹ค๋ฉด? i+2๋ฒˆ์งธ๋„ ๊ฐ™์ด ์ถœ์‹œ๊ฐ€ ๋˜๊ณ  ์—ฐ์‡„์ ์œผ๋กœ 5์ผ๋ณด๋‹ค ์งง๊ฒŒ ๊ฑธ๋ฆฌ๋Š” ๊ธฐ๋Šฅ๋“ค์€ ๋™์‹œ์— ๋ฐฐํฌ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ๋‹จ, ์ž„์˜์˜ k์— ๋Œ€ํ•ด i+k๋ฒˆ์งธ ๊ธฐ๋Šฅ์ด 5์ผ๋ณด๋‹ค ๊ธธ๊ฒŒ ๊ฑธ๋ฆฐ๋‹ค๋ฉด ๋ฐฐํฌ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋•Œ i + k ๋ฒˆ์งธ๋ณด๋‹ค ๋’ค์—์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์€ 5์ผ๋ณด๋‹ค ์งง๊ฒŒ ๊ฑธ๋ ค์„œ ๊ฐœ๋ฐœ์ด ๋ ์ง€๋ผ๋„ ๋™์‹œ์— ๋ฐฐํฌ๋  ์ˆ˜ ์—†๋‹ค. ๋ฐฐํฌ๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— i+k๋ฒˆ์งธ ๊ธฐ๋Šฅ์ด ๋ฐฐํฌ๋˜์ง€ ์•Š์œผ๋ฉด ๊ทธ ๋’ค์—์žˆ๋Š” ๊ธฐ๋Šฅ์€ ๋ฐฐํฌ๋  ์ˆ˜ ์—†๋‹ค.

 

  • ๊ธฐ๋Šฅ์ด ๊ฐœ๋ฐœ ๋˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„

๊ฐ ๊ธฐ๋Šฅ๋งˆ๋‹ค ๊ฐœ๋ฐœ๋˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด๋‘์—ˆ๋‹ค.

์ž‘์—…์˜ ์ง„ํ–‰๋„๊ฐ€ 100์ด ๋˜์–ด์•ผ ๊ฐœ๋ฐœ์ด ๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ "(100 - ํ˜„์žฌ ์ž‘์—…์˜ ์ง„๋„) / ๊ฐœ๋ฐœ์†๋„"๋ฅผ ์˜ฌ๋ฆผ ํ•œ ๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ์ด๋•Œ ์ฃผ์–ด์ง€๋Š” ์ž‘์—…์˜ ์ง„๋„์™€ ๊ฐœ๋ฐœ์†๋„๋Š” intํ˜• ์ด๋ฏ€๋กœ ๊ณ„์‚ฐ๊ฒฐ๊ณผ๊ฐ€ doubleํ˜•์œผ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

๊ฐ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋Š” how_long ์ด๋ผ๋Š” intํ˜•์˜ ๋ฒกํ„ฐ์— ์ €์žฅํ•ด ๋‘์—ˆ๋‹ค.

  • ์ฝ”๋“œ ๊ตฌํ˜„

for๋ฌธ์„ 0๋ถ€ํ„ฐ ~ ์ด ๋ฐฐํฌํ•ด์•ผํ•  ๊ธฐ๋Šฅ์˜ ์ˆ˜ - 1 ๋ฒˆ์งธ ๊นŒ์ง€ ๋Œ๋ฉด์„œ i๋ฒˆ ์งธ ๊ธฐ๋Šฅ์„ ๋ฐฐํฌํ•œ๋‹ค.

i๋ฒˆ์งธ ๊ธฐ๋Šฅ์„ ๋ฐฐํฌํ•˜๋ ค ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, i๋ฒˆ์ด ๋ฐฐํฌ๋˜๊ธฐ ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์„ now_time ์ด๋ผ๊ณ  ํ•˜๋ฉด now_time = how_long[i] ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ i๋ฒˆ ๊ธฐ๋Šฅ์€ ๋ฌด์กฐ๊ฑด ๋ฐฐํฌ๋  ์˜ˆ์ •์ด๋ฏ€๋กœ int count ์˜ ์ดˆ๊ธฐ๊ฐ’์„ 1๋กœ ์„ ์–ธํ•œ๋‹ค.

์ด๋•Œ i + 1๋ฒˆ์งธ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ๋Œ๋ฉด์„œ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด now_time๋ณด๋‹ค ๊ธด ๊ธฐ๋Šฅ์ด ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ i๋ฅผ ํ•œ ์นธ์”ฉ ๋’ค๋กœ ์ด๋™์‹œํ‚ค๋ฉด์„œ ๋ฐฐํฌ๋  ๊ธฐ๋Šฅ์˜ ์ˆ˜์ธ count๋ฅผ +1 ํ•ด์ค€๋‹ค.

now_time๋ณด๋‹ค ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋‚ฌ์„ ๋•Œ ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•˜๊ณ  answer์— count๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

 
#include <string>
#include <vector>
#include <math.h>
using namespace std;
const int MAX_N = 100 + 5;
int how_long[MAX_N];
vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    for(int i = 0; i<progresses.size(); i++)
        how_long[i] = ceil((double)(100-progresses[i]) / speeds[i]);
    
    int now_time = 0;
    for(int i = 0; i < progresses.size(); i++){
        int cnt = 1;
        now_time = how_long[i];
        for(int j = i + 1; j<progresses.size(); j++){
            if(how_long[j] <= now_time){
                i++;
                cnt++;
            }
            else break;
        }
        answer.push_back(cnt);
    }
    
    return answer;
}
cs

 

์‚ฌ์‹ค ์Šคํƒ/ํ ๋ฌธ์ œ๋กœ ๋‚˜์™€์žˆ๋Š” ๋ฌธ์ œ์˜€์ง€๋งŒ ์Šคํƒ/ํ๋Š” ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€์•Š๊ณ  ํ’€์ดํ–ˆ๋‹ค.

๋งŒ์•ฝ, ์Šคํƒ ๋˜๋Š” ํ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€๋ผ๊ณ  ํ–ˆ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ํ’€์–ด์„  ์•ˆ๋œ๋‹ค.

๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๋ฌธ์ œ์˜ ์ฃผ์ œ์— ๋งž๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒƒ์„ ์—ฐ์Šตํ•ด์•ผ๊ฒ ๋‹ค.

728x90