728x90

 

1. ๋ฌธ์ œ ์š”์•ฝ

์ ˆ๋Œ“๊ฐ’์ด 10c ํ˜•ํƒœ์ธ ์ •์ˆ˜๋“ค์ด ์ ํžŒ ๋ฒ„ํŠผ
ํ˜„์žฌ ์ธต ์ˆ˜์— ๋ฒ„ํŠผ์— ์ ํ˜€ ์žˆ๋Š” ๊ฐ’์„ ๋”ํ•œ ์ธต์œผ๋กœ ์ด๋™
์—˜๋ฆฌ๋ฒ ์ดํ„ฐ๊ฐ€ ์œ„์น˜ํ•ด ์žˆ๋Š” ์ธต๊ณผ ๋ฒ„ํŠผ์˜ ๊ฐ’์„ ๋”ํ•œ ๊ฒฐ๊ณผ๊ฐ€ 0๋ณด๋‹ค ์ž‘์œผ๋ฉด ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ๋Š” ์›€์ง์ด์ง€ ์•Š์Œ
0์ธต์ด ๊ฐ€์žฅ ์•„๋ž˜์ธต
๋ฒ„ํŠผ ํ•œ๋ฒˆ ๋‹น ๋Œ ํ•œ๊ฐœ
์ตœ์†Œํ•œ์˜ ๋Œ ์ตœ๋Œ€ํ•œ์œผ๋กœ ๋‚ด๋ ค๊ฐ€๊ธฐ
10๋‹จ์œ„๋กœ ๋‚˜๋จธ์ง€ ๊ณ„์‚ฐ
2,5,5,4 -> 16
1,6 -> 1+(10-6) = 5
7~9 ์ธ ๊ฒฝ์šฐ ๋ฐ˜์˜ฌ๋ฆผํ•ด์„œ ๋นผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ์ด๋“
1~5 ์ธ ๊ฒฝ์šฐ ๊ทธ๋ƒฅ ๋นผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ด๋“
2000 + 500 + 50 + 4
์ž‘์€ ๊ฒฐ๊ณผ๋“ค์„ ๋ชจ์•„์„œ ํฐ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ธฐ

 

 

2. ์ฝ”๋“œ

#include <string>
#include <vector>

using namespace std;

//์ตœ์ ์˜ ์‚ฌ์šฉ ๋Œ ๊ฐฏ์ˆ˜ ๊ตฌํ•ด์„œ answer์— ๋”ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜
void GetOptimalStoneCount(int& storey,int& answer){
    int count = storey%10;
    
    if(count<5) answer+=count;
    else{
        if(count==5&&storey%100<50){
            answer+=count;
        }
        else{
            answer+=10-count;
            storey=storey+10-count;
        }
    }
    storey/=10;
    //printf("%d, %d\n",storey,answer);
}

int solution(int storey) {
    int answer = 0;

    while(storey>1){
        GetOptimalStoneCount(storey,answer);
    }
    
    return answer+storey;
}

 

3. ํ•ด์„ค

์ œ๊ฐ€ ์„ ํƒํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฐฉ๋ฒ•์€ 10์”ฉ ๋‚˜๋ˆˆ๋‹ค์Œ ํ•ด๋‹น ๊ฐ’์ด ๋ฐ˜์˜ฌ๋ฆผ์ด ๊ฐ€๋Šฅํ•œ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๊ฒƒ์„ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋งจ ๋์˜ ์ž๋ฆฌ ์ˆซ์ž๊ฐ€ 6์ด์ƒ์ธ ๊ฒฝ์šฐ -6์„ ํ†ตํ•ด 6๋ฒˆ ๋Œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ•œ์ž๋ฆฟ์ˆ˜๋ฅผ ๋Š˜๋ ค์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ด๋“์ž…๋‹ˆ๋‹ค. 56์˜ ๊ฒฝ์šฐ 5+6 = 11 ๋ณด๋‹ค 4+6 = 10 ์˜ ๊ฒฝ์šฐ 1์˜ ์ด๋“์„ ๋” ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋กœ์ง์„ ๋ฐ”ํƒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๊ฒŒ ๋˜๋ฉด ์ตœ์ ์˜ ๋Œ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ 5์˜ ๊ฒฝ์šฐ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์ด 555, 545 ์ด ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

545์˜ ๊ฒฝ์šฐ 5+4+5 = 14๊ฐ€ ์ตœ์ ์˜ ๋Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋ฐ˜์˜ฌ๋ฆผ์„ ํ•ด๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ 5+5+5 = 15๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋งŽ์€ ๋Œ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

555์˜ ๊ฒฝ์šฐ๊ฐ€ ์ œ์ผ ํ—ท๊ฐˆ๋ ค์„œ ์‹œ๊ฐ„์„ ์˜ค๋ž˜์“ฐ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

555์˜ ๊ฒฝ์šฐ,

560 -> +5  : 5๋ฒˆ(+1)
600 -> +40 : 4๋ฒˆ(+10)
1000 -> +400 : 4๋ฒˆ(+100)
0 -> -1000 : 1๋ฒˆ(-1000)

 

 

if(count==5&&storey%100<50){
	answer+=count;
}

 

ํ•ด๋‹น if๋ฌธ์„ ํ†ตํ•ด 10์˜ ์ž๋ฆฌ ์ˆ˜๊ฐ€5๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜์˜ฌ๋ฆผ์„ ํ•ด์ฃผ์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ - ๋ฅผ ๊ฐํ–‰ํ•˜๊ณ , ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜์˜ฌ๋ฆผ์„ ์ง„ํ–‰ํ•˜์—ฌ ์ด๋“์„ ๋ณด๋Š” ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

4. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

999 -> 1+1 = 2

55 -> 5+5 = 10

75 -> 5+2+1 = 8

155 -> 5+4+2 = 11

545 -> 5+4+5 = 14

555 -> 5+4+4+1 = 14

 

 

 

 

๋ฐ˜์‘ํ˜•
728x90

 

1. ๋ฌธ์ œ

 

์‚ฌ์ „์— ์•ŒํŒŒ๋ฒณ ๋ชจ์Œ 'A', 'E', 'I', 'O', 'U'๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”, ๊ธธ์ด 5 ์ดํ•˜์˜ ๋ชจ๋“  ๋‹จ์–ด๊ฐ€ ์ˆ˜๋ก๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ „์—์„œ ์ฒซ ๋ฒˆ์งธ ๋‹จ์–ด๋Š” "A"์ด๊ณ , ๊ทธ๋‹ค์Œ์€ "AA"์ด๋ฉฐ, ๋งˆ์ง€๋ง‰ ๋‹จ์–ด๋Š” "UUUUU"์ž…๋‹ˆ๋‹ค.

๋‹จ์–ด ํ•˜๋‚˜ word๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ด ๋‹จ์–ด๊ฐ€ ์‚ฌ์ „์—์„œ ๋ช‡ ๋ฒˆ์งธ ๋‹จ์–ด์ธ์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

2. ์ฝ”๋“œ

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

using namespace std;

vector<string> nums;
string aeiou[5]={"A","E","I","O","U"};

void repeatPermutation(string s, int maxLength)
{
    if(maxLength==s.size()) //๋ฌธ์ž์—ด์˜ ํฌ๊ธฐ == ์ฑ„์šธ ๋ฌธ์ž์—ด ํฌ๊ธฐ
    {
        nums.push_back(s);
        return; //์žฌ๊ท€ํ•จ์ˆ˜ ์ข…๋ฃŒ
    }
    
    for(int i=0;i<5;i++){
        repeatPermutation(s+aeiou[i],maxLength); //์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ
    }
}

int solution(string word) {
    int answer = 0;
    
    for(int i=1;i<=5;i++){
        repeatPermutation("",i);
    }
    
    sort(nums.begin(), nums.end());  

    for(int i=0;i<nums.size();i++){
        if(word==nums[i]){
            answer=i;
            break;
        }
    }
       
    return answer+1;
}

 

3. ํ•ด์„ค

vector<string> nums;
string aeiou[5]={"A","E","I","O","U"};

void repeatPermutation(string s, int maxLength)
{
    if(maxLength==s.size()) //๋ฌธ์ž์—ด์˜ ํฌ๊ธฐ == ์ฑ„์šธ ๋ฌธ์ž์—ด ํฌ๊ธฐ
    {
        nums.push_back(s);
        return; //์žฌ๊ท€ํ•จ์ˆ˜ ์ข…๋ฃŒ
    }
    
    for(int i=0;i<5;i++){
        repeatPermutation(s+aeiou[i],maxLength); //์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ
    }
}

int solution(string word) {
    int answer = 0;
    
    for(int i=1;i<=5;i++){
        repeatPermutation("",i);
    }

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1์ž๋ฆฌ์ผ ๋•Œ, 2์ž๋ฆฌ์ผ ๋•Œ, 3์ž๋ฆฌ์ผ ๋•Œ, 4์ž๋ฆฌ์ผ ๋•Œ, 5์ž๋ฆฌ์ผ ๋•Œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 1์ž๋ฆฌ์˜ ๊ฒฝ์šฐ

for(int i=0;i<5;i++){
        repeatPermutation(s+aeiou[i],maxLength); //์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ
}

์ด ๋ถ€๋ถ„์ด aeiou[0] ~aeiou[4] ๊นŒ์ง€์˜ ๊ฐ’์ด ํ•œ๋ฒˆ์”ฉ ํ˜ธ์ถœ ๋˜๋ฉด์„œ ๋๋‚ฉ๋‹ˆ๋‹ค.

2์ž๋ฆฌ์˜ ๊ฒฝ์šฐ ์œ„์˜ for๋ฌธ์ด aeiou[0]+aeiou[0]~aeiou[4] ์—์„œ๋ถ€ํ„ฐ aeiou[4]+aeiou[0]~aeiou[4] ๊นŒ์ง€ ๊ณ„์‚ฐํ•จ์œผ๋กœ ์ด 25๊ฐ€์ง€์˜ ๋ฌธ์ž์—ด์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ 5์ž๋ฆฌ์˜ ๊ฒฝ์šฐ๊นŒ์ง€ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 

sort(nums.begin(), nums.end());  

    for(int i=0;i<nums.size();i++){
        if(word==nums[i]){
            answer=i;
            break;
        }
    }
       
    return answer+1;
}

๊ทธ ํ›„, ์‚ฌ์ „์  ๋ฐฐ์—ด๋กœ ๋‚˜์—ดํ•ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด์— ์ €์žฅ๋œ ๋ฐฐ์—ด์€ A,E,I,O,U,AA,AE,AI,AO,AU.... ๋“ฑ์˜ ์ˆœ์„œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.(ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋‚˜ (1์ž๋ฆฌ์ˆ˜...2์ž๋ฆฌ์ˆ˜...3์ž๋ฆฌ์ˆ˜.... ๋กœ ์ €์žฅ)

๊ธฐ๋ณธ์ ์œผ๋กœ sort ํ•จ์ˆ˜๋Š” string ๋ณ€์ˆ˜์—์„œ ์‚ฌ์ „์  ์ˆœ์„œ๋กœ ์ •๋ ฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„ for๋ฌธ์„ ํ†ตํ•ด ๋ฐ›์€ word ๊ฐ’๊ณผ nums[i]์˜ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ํ•ด๋‹น ๋ฒˆํ˜ธ๋ฅผ ๋ฝ‘์•„๋ƒ…๋‹ˆ๋‹ค.

๋ฒกํ„ฐ๋Š” 0๋ฒˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ์— +1์„ ํ•ด์ฃผ๋ฉด ๋ช‡๋ฒˆ์งธ ์ˆ˜์ธ์ง€๋ฅผ ๋„์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€ป for๋ฌธ์„ ์“ฐ์ง€ ์•Š๊ณ  find() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ํ•œ์ค„๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•
728x90

 

1. ๋ฌธ์ œ

์ถœ์ฒ˜ : https://school.programmers.co.kr/learn/courses/30/lessons/87946

์œ ์ €์˜ ํ˜„์žฌ ํ”ผ๋กœ๋„ k์™€ ๊ฐ ๋˜์ „๋ณ„ "์ตœ์†Œ ํ•„์š” ํ”ผ๋กœ๋„", "์†Œ๋ชจ ํ”ผ๋กœ๋„"๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด dungeons ๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์œ ์ €๊ฐ€ ํƒํ—˜ํ• ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋˜์ „ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

2. ์ฝ”๋“œ

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

using namespace std;

//์ˆ˜์—ด next_permutation์„ ํ™œ์šฉํ•˜์—ฌ์„œ ํ’€์ด
//๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ๊ณ„์‚ฐํ•œ ๋‹ค์Œ ์ฐจ๋ก€๋กœ ๊ฒ€์ฆํ•จ
int solution(int k, vector<vector<int>> dungeons) {
    int answer = 0;
    
    vector<int> v;
    // 0๋ถ€ํ„ฐ ๋˜์ „ ์‚ฌ์ด์ฆˆ๊นŒ์ง€ ๋ฒกํ„ฐ์— ์ €์žฅ
	for(int i=0; i<dungeons.size(); i++){
		v.push_back(i);
	}
    
    do{
        int pirodo=k;
        int count=0;
		for(int i=0; i<v.size(); i++){
            if(pirodo>=dungeons[v[i]][0]){
                //ํ”ผ๋กœ๋„ ์ฐจ๊ฐ ๋ฐ ๋˜์ „ ๊ฐฏ์ˆ˜ ์˜ฌ๋ฆฌ๊ธฐ
                count++;
                pirodo-=dungeons[v[i]][1];
            }
		}
        answer=max(answer,count);
	}while(next_permutation(v.begin(),v.end()));
    
    return answer;
}

 

3. ํ•ด์„ค

//์ˆ˜์—ด next_permutation์„ ํ™œ์šฉํ•˜์—ฌ์„œ ํ’€์ด
//๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ๊ณ„์‚ฐํ•œ ๋‹ค์Œ ์ฐจ๋ก€๋กœ ๊ฒ€์ฆํ•จ
int solution(int k, vector<vector<int>> dungeons) {
    int answer = 0;
    
    vector<int> v;
    // 0๋ถ€ํ„ฐ ๋˜์ „ ์‚ฌ์ด์ฆˆ๊นŒ์ง€ ๋ฒกํ„ฐ์— ์ €์žฅ
	for(int i=0; i<dungeons.size(); i++){
		v.push_back(i);
	}

 

๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋งŽ์ง€ ์•Š๊ธฐ์— ์™„์ „ ํƒ์ƒ‰์„ ํ†ตํ•ด ํ’€์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

์ •ํ•ด์ง„ ๋ฐฐ์—ด์—์„œ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ๋•Œ๋Š” ์ˆ˜์—ด์„ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๋จผ์ € 0~ ๋˜์ „์˜ ๊ฐฏ์ˆ˜ ๊นŒ์ง€์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๋งŒ์•ฝ ๋˜์ „์˜ ๊ฐฏ์ˆ˜๊ฐ€ 3์ด๋ผ๋ฉด [0,1,2] ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

  do{
	int pirodo=k;
	int count=0;
	for(int i=0; i<v.size(); i++){
        	if(pirodo>=dungeons[v[i]][0]){
                //ํ”ผ๋กœ๋„ ์ฐจ๊ฐ ๋ฐ ๋˜์ „ ๊ฐฏ์ˆ˜ ์˜ฌ๋ฆฌ๊ธฐ
                count++;
                pirodo-=dungeons[v[i]][1];
            }
	}
    	answer=max(answer,count);
}while(next_permutation(v.begin(),v.end()));

๋งŒ๋“ค์–ด์ง„ ๋ฐฐ์—ด์„ ๊ฐ€์ง€๊ณ  next_permutation() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์ˆ˜์—ด์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

do while๋ฌธ์„ ํ†ตํ•ด ์ˆ˜์—ด์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ ํ”ผ๋กœ๋„์™€ ๋˜์ „์ด ํ•„์š”ํ•œ ์ตœ์†Œ ํ”ผ๋กœ๋„๋ฅผ ๋„˜๊ธด๋‹ค๋ฉด ๋˜์ „์„ ํด๋ฆฌ์–ดํ•˜๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค.

๋งŒ์•ฝ ์ตœ์†Œ ํ”ผ๋กœ๋„๋ฅผ ๋„˜๊ธฐ์ง€ ๋ชปํ•˜๋ฉด ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ„๋‹ค.

๊ณ„์‚ฐ์ด ๋๋‚œ ํ›„ ๋งŒ์•ฝ Count๊ฐ€ ๊ธฐ์กด์˜ answer๋ณด๋‹ค ํด ๊ฒฝ์šฐ answer์— count ๊ฐ’์„ ์‚ฝ์ž…ํ•œ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•

+ Recent posts