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

[C++/PGS] Lv.2 : ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ (GREEDY)

by xxilliant 2023. 3. 2.
728x90
๋ฐ˜์‘ํ˜•

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

 

๋ฌธ์ œ ์„ค๋ช…

์–ด๋–ค ์ˆซ์ž์—์„œ k๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๊ตฌํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž 1924์—์„œ ์ˆ˜ ๋‘ ๊ฐœ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด [19, 12, 14, 92, 94, 24] ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋Š” 94 ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ์ˆซ์ž number์™€ ์ œ๊ฑฐํ•  ์ˆ˜์˜ ๊ฐœ์ˆ˜ k๊ฐ€ solution ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. number์—์„œ k ๊ฐœ์˜ ์ˆ˜๋ฅผ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.

 

์ œํ•œ ์กฐ๊ฑด
  • number๋Š” 2์ž๋ฆฌ ์ด์ƒ, 1,000,000์ž๋ฆฌ ์ดํ•˜์ธ ์ˆซ์ž์ž…๋‹ˆ๋‹ค.
  • k๋Š” 1 ์ด์ƒ number์˜ ์ž๋ฆฟ์ˆ˜ ๋ฏธ๋งŒ์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์•Œ๋งž์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋– ์˜ฌ๋ฆฌ๊ธฐ ํž˜๋“ค์—ˆ๋‹ค.

๊ทธ๋ฆฌ๋””๋‹ˆ๊นŒ ๊ทธ๋ƒฅ ์•ž๋’ค๋งŒ ๋น„๊ตํ•˜๋ฉด ๋˜๋ ค๋‚˜?!ํ•˜๊ณ  ์ฒ˜์Œ์—๋Š” ์ˆซ์ž์˜ ์•ž/๋’ค๋งŒ ๋น„๊ตํ•ด์„œ ๋” ํฐ์ˆ˜๋ฅผ ๋‚จ๊ฒจ๋†“๊ณ ,

์ž‘์€ ์ˆ˜๋ฅผ eraseํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•˜์˜€๋Š”๋ฐ

์–ด์ฐŒ์ €์ฐŒ ์ฝ”๋“œ์‹คํ–‰ ํ…Œ์ผ€๋Š” ๋‹ค ๋งž์•˜์ง€๋งŒ, ์ฑ„์ ์˜ ๊ฒฐ๊ณผ๋Š” ์ฒ˜์ฐธํ–ˆ๋‹ค....

 

๊ทธ๋ž˜์„œ ๋ญ”๊ฐ€ ์ด ๋ฐฉ๋ฒ•์ด ์•„๋‹Œ๋“ฏํ•ด์„œ ๊ตฌ๊ธ€๋งํ–ˆ์Œ. ๐Ÿค“

์„ค๋ช…์„ ์ฝ๊ณ ๋„ ์ดํ•ด๊ฐ€ ๋ฐ”๋กœ ์•ˆ๋˜์–ด์„œ ์—ฌ๋Ÿฌ๋ฒˆ ์ƒ๊ฐํ•ด๋ณด๊ณ  ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

 

 

1. number๊ณผ answer์€ ์•ž์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๊ฐ€ ๊ทธ๋Œ€๋กœ ์ด์–ด์ง€๊ณ , number.size() - k ๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ

    i๋ฒˆ์งธ๋กœ number์˜ ์ˆซ์ž๋ฅผ ๋ฝ‘์œผ๋ ค๋ฉด ๊ทธ ๋’ค์— ์ตœ์†Œํ•œ number.size()-k-i ๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ๋” ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

2. number.size() - k - i = number.size() - ( k + i )

 

3. ๋”ฐ๋ผ์„œ number์ธ๋ฑ์Šค ํƒ์ƒ‰ ์‹œ ๋ฝ‘์„ ์ˆซ์ž์˜ ์ธ๋ฑ์Šค ์˜์—ญ์€ start ~ k+i ๊นŒ์ง€์ด๋‹ค.

 

 

 

 

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

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

string solution(string number, int k) {
    string answer = "";
    int answersize = number.size() - k;
    int idx = 0;
    for(int i = 0; i < answersize; ++i){
        
        char maxint = number[idx];
        int maxidx = idx;
        
        for(int j = idx; j <= k+i; j++){ // k + answersize = number.size()
            if(maxint < number[j]){
                maxint = number[j];
                maxidx = j;
            }
        }
        idx = maxidx + 1;
        answer += maxint;
    }
    
    return answer;
}
728x90
๋ฐ˜์‘ํ˜•