728x90

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

์ขŒํ‘œ ํ‰๋ฉด์„ ์ข‹์•„ํ•˜๋Š” ์ง„์ˆ˜๋Š” x์ถ•๊ณผ y์ถ•์ด ์ง๊ตํ•˜๋Š” 2์ฐจ์› ์ขŒํ‘œํ‰๋ฉด์— ์ ์„ ์ฐ์œผ๋ฉด์„œ ๋†€๊ณ  ์žˆ์Œ
์ง„์ˆ˜๋Š” ๋‘ ์–‘์˜ ์ •์ˆ˜ k,d๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ์„ ์ฐ์œผ๋ ค ํ•จ
์›์  (0,0)์œผ๋กœ๋ถ€ํ„ฐ x์ถ• ๋ฐฉํ–ฅ์œผ๋กœ a*k(a=0,1,2,3...), y์ถ• ๋ฐฉํ–ฅ์œผ๋กœ b*k(b=0,1,2,3...)๋งŒํผ ๋–จ์–ด์ง„ ์œ„์น˜์— ์ ์„ ์ฐ์Œ
์›์ ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ€ d๋ฅผ ๋„˜๋Š” ์œ„์น˜์—๋Š” ์ ์„ ์ฐ์ง€ ์•Š์Œ -> ๋ฐ˜์ง€๋ฆ„์ด d์ธ ์› ์•ˆ์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ํ•ด๊ฒฐํ•จ
k๊ฐ€ 2, d๊ฐ€ 4์ธ ๊ฒฝ์šฐ์—๋Š”
(0,0),(0,2),(0,4),(2,0),(2,2),(4,0) ์œ„์น˜์— ์ ์„ ์ฐ์–ด ์ด 6๊ฐœ์˜ ์ ์„ ์ฐ์Œ
์ •์ˆ˜ k์™€ ์›์ ๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ d๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ ์ด ์ด ๋ช‡ ๊ฐœ ์ฐํžˆ๋Š”์ง€ returnํ•˜๋Š” solution ํ•จ์ˆ˜ ์™„์„ฑ

 

 

 

2. ์ฝ”๋“œ

#include <string>
#include <vector>
#include <cmath>

using namespace std;


long long solution(int k, int d) {
    long long answer = 0;
    
    for(long long i=0;i<=d;i+=k){
        int y = sqrt(pow(d,2)-pow(i,2));
        answer+=y/(long long)k+1;
    }
    
    return answer;
}

 

 

 

3. ํ•ด์„ค

์ด ๋ฌธ์ œ์—์„œ ๊ฐ€์žฅ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ long long ์ด๋ผ๋Š” ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜์ธ ๊ฒƒ ๊ฐ™๋‹ค

์›์ ๊ณผ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ d๋ฅผ ๋„˜๋Š” ์œ„์น˜์—๋Š” ์ ์„ ์ฐ์ง€ ์•Š๋Š”๋‹ค๋Š” ์ „์ œ ์กฐ๊ฑด์€ ๋ฐ˜์ง€๋ฆ„์ด d์ธ ์› ์•ˆ์— ๋ชจ๋“  ์ ๋“ค์€ ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง๊ณผ ๊ฐ™๋‹ค

x ์ถ•์˜ ๋ฐฉํ–ฅ์œผ๋กœ๋Š” a*k, y ์ถ•์˜ ๋ฐฉํ–ฅ์œผ๋กœ๋Š” b*k ๋งŒํผ ๋–จ์–ด์ง„ ์œ„์น˜์— ์ ์„ ์ฐ๋Š”๋‹ค๊ณ ํ•˜์—ฌ์„œ k๋งŒํผ ์ฆ๊ฐ€ํ•˜๋Š” for.๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค

 int y = sqrt(pow(d,2)-pow(i,2));

 

y์˜ ์ตœ๋Œ“๊ฐ’์„ ์œ„์˜ ์ฝ”๋“œ๋กœ ๊ตฌํ•˜๊ณ , ํ•ด๋‹น ์ตœ๋Œ€ y๊ฐ’/k ๋ฅผ ํ•˜๋ฉด ๊ทธ ์•ˆ์— b*k๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ณ , 0์ธ๊ฒฝ์šฐ๋ฅผ ํฌํ•จํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— +1์„ ํ•ด์ค€๋‹ค

 

 

 

 

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•
728x90

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

k ๊ฐœ๋ฅผ ๊ณจ๋ผ ์ƒ์ž ํ•˜๋‚˜์— ๋‹ด์•„ ํŒ๋งค
๊ทค์„ ํฌ๊ธฐ๋ณ„๋กœ ๋ถ„๋ฅ˜ํ–ˆ์„ ๋•Œ ์„œ๋กœ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์‹ถ์Œ


์ฒ˜์Œ์—๋Š” ๋ฌธ์ œ๊ฐ€ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ ๊ฒฐ๊ตญ ๊ฐ™์€ ํฌ๊ธฐ์˜ ๊ทค์„ ๋ชจ์•„์„œ ์ตœ๋Œ€ํ•œ ํŒ๋งคํ•˜๋ ค๊ณ  ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค

 

 

2. ์ฝ”๋“œ

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

using namespace std;


bool cmp(const pair<int,int>& lValue,const pair<int,int>& rValue){
    return lValue.second>rValue.second;
}

int solution(int k, vector<int> tangerine) {
    int answer = 0;
    
    vector<pair<int,int>> tangerinePair;
    
    sort(tangerine.begin(),tangerine.end());
    
    /*for(int i=0;i<tangerine.size();i++){
        printf("%d ",tangerine[i]);
    }
    printf("\n");*/
    
    int prev = tangerine[0];
    tangerinePair.push_back(make_pair(tangerine[0],0));
    for(int i=0;i<tangerine.size();i++){
        //printf("%d ",tangerine[i]);
        if(prev==tangerine[i]){
            tangerinePair[tangerinePair.size()-1].second++;
        }
        else{
            tangerinePair.push_back(make_pair(tangerine[i],1));
            prev=tangerine[i];
        }
    }
    //printf("\n");
    
    sort(tangerinePair.begin(),tangerinePair.end(),cmp);
    
    int count=0;
    for(int i=0;i<tangerinePair.size();i++){
        //printf("%d %d\n",tangerinePair[i].first,tangerinePair[i].second);
        if(count>=k) break;
        count+=tangerinePair[i].second;
        answer++;
    }
    
    
    return answer;
}

 

 

 

3. ํ•ด์„ค

๋จผ์ € vector<int> tangerine ๋ฒกํ„ฐ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค

์ •๋ ฌํ•œ ๋‹ค์Œ  vector<pair<int,int>> tangerinePair์— <๊ทค์˜ํฌ๊ธฐ,๊ฐฏ์ˆ˜>๋ฅผ ๋‹ด์•˜๋‹ค

int prev = tangerine[0];
tangerinePair.push_back(make_pair(tangerine[0],0));

for(int i=0;i<tangerine.size();i++){
    if(prev==tangerine[i]){
        tangerinePair[tangerinePair.size()-1].second++;
    }
    else{
        tangerinePair.push_back(make_pair(tangerine[i],1));
        prev=tangerine[i];
    }
}

 

๊ทธ ํ›„, ๊ทค์˜ ๊ฐฏ์ˆ˜์— ๋”ฐ๋ผ vector<pair<int,int> tangerinePiar๋ฅผ ์ •๋ ฌํ•ด์ฃผ์—ˆ๋‹ค

sort(tangerinePair.begin(),tangerinePair.end(),cmp);
bool cmp(const pair<int,int>& lValue,const pair<int,int>& rValue){
    return lValue.second>rValue.second;
}

 

๊ทธ๋ฆฌ๊ณ  for๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์ค‘๋ณต๋˜๋Š” ๊ฐฏ์ˆ˜๋“ค์„ k์™€ ๋น„๊ตํ•˜์—ฌ ๋”ํ•ด์ค˜์„œ ์ˆ˜๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด breakํ•˜๋„๋ก ์ œ์ž‘ํ•˜์—ฌ์ฃผ์—ˆ๋‹ค

int count=0;
for(int i=0;i<tangerinePair.size();i++){
    if(count>=k) break;
    count+=tangerinePair[i].second;
    answer++;
}

 

 

 

 

 

 

 

 

 

 

 

๋ฐ˜์‘ํ˜•
728x90

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

์—ด์€ ์ปฌ๋Ÿผ, ํ–‰์€ ํŠœํ”Œ
์ฒซ๋ฒˆ์งธ ์ปฌ๋Ÿผ์€ ๊ธฐ๋ณธํ‚ค๋กœ์„œ ๋ชจ๋“  ํŠœํ”Œ์— ๋Œ€ํ•ด ๊ทธ ๊ฐ’์ด ์ค‘๋ณต๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅ

(์š”์•ฝํ•˜์ž๋ฉด id ๊ฐ™์€ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ผ๋Š” ๊ฒƒ)


1. ํ•ด์‹œ ํ•จ์ˆ˜๋Š” col, row_begin, row_end ์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์Œ
2. ํ…Œ์ด๋ธ”์˜ ํŠœํ”Œ(ํ–‰)์„ col๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•˜๋˜, 
๋งŒ์•ฝ ๊ทธ ๊ฐ’์ด ๋™์ผํ•˜๋ฉด ๊ธฐ๋ณธํ‚ค์ธ ์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•จ


์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ์—์„œ S_i๋ฅผ i๋ฒˆ์งธ ํ–‰์˜ ํŠœํ”Œ์— ๋Œ€ํ•ด ๊ฐ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ i๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋“ค์˜ ํ•ฉ์œผ๋กœ ์ •์˜
row_begin <= i <= row_end ์ธ ๋ชจ๋“  S_i๋ฅผ ๋ˆ„์ ํ•˜์—ฌ bitwise XOR ํ•œ ๊ฐ’์„ ํ•ด์‹œ ๊ฐ’์œผ๋กœ์„œ ๋ฐ˜ํ™˜ํ•จ

 

 

2. ์ฝ”๋“œ

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

using namespace std;

int sortIndex;

bool cmp(vector<int> lValue,vector<int> rValue){
    if(lValue[sortIndex]==rValue[sortIndex]) return lValue[0]>rValue[0];
    return lValue[sortIndex]<rValue[sortIndex];
}

int solution(vector<vector<int>> data, int col, int row_begin, int row_end) {
    int answer = 0;
    sortIndex=col-1;
    
    /*for(int i=0;i<data.size();i++){
        for(int j=0;j<data[i].size();j++){
            printf("%d ",data[i][j]);
        }
        printf("\n");
    }*/
    
    sort(data.begin(),data.end(),cmp);
    
    /*printf("\n\n");
    
    for(int i=0;i<data.size();i++){
        for(int j=0;j<data[i].size();j++){
            printf("%d ",data[i][j]);
        }
        printf("\n");
    }*/
    
    int s2;
    for(int i=row_begin-1;i<row_end;i++){
        s2=0;
        for(int j=0;j<data[i].size();j++){
            s2+=data[i][j]%(i+1);
            //printf("%d : %d %d ~~\n",(i+1),data[i][j],data[i][j]%(i+1));
        }
        //printf("%d !!\n",s2);
        answer= answer^s2;
    }
    
    
    return answer;
}

 

 

 

 

3. ํ•ด์„ค

๋จผ์ €, ํ…Œ์ด๋ธ”์˜ ํŠœํ”Œ์„ col ๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•ฉ๋‹ˆ๋‹ค

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ col ๋ฒˆ์žฌ ์ด๊ธฐ ๋–„๋ฌธ์— vector์˜ col-1์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค

int solution(vector<vector<int>> data, int col, int row_begin, int row_end) {
    int answer = 0;
    sortIndex=col-1;
    ...
}
bool cmp(vector<int> lValue,vector<int> rValue){
    if(lValue[sortIndex]==rValue[sortIndex]) return lValue[0]>rValue[0];
    return lValue[sortIndex]<rValue[sortIndex];
}

 

sortIndex๋ผ๋Š” ๋ณ€์ˆ˜์— col-1์„ ํ• ๋‹นํ•ด์ฃผ๊ณ , algorithm ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ sortํ•จ์ˆ˜์™€ ์ œ๊ฐ€ ์ •์˜ํ•˜๋Š” cmp ๋น„๊ตํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌ์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค

๋งŒ์•ฝ ๋น„๊ต ๋ฒกํ„ฐ๋“ค์˜ sortIndex ์œ„์น˜์˜ ๊ฐ’์ด ๊ฐ™์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค

 

๊ทธ ํ›„์—๋Š” ^ ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ XOR ๋น„ํŠธ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค

 

 

๋น„ํŠธ์—ฐ์‚ฐ XOR ์ด๋ž€?

๋ฒ ํƒ€์  OR ์—ฐ์‚ฐ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋Š”๋ฐ

๋‘ ๋น„ํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋งŒ 1์ด ๋˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 0์ด ๋˜๋Š” ํŠน์ดํ•œ ์—ฐ์‚ฐ์ž

 

์—ฐ์‚ฐ ๊ฒฐ๊ณผ
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0

 

int s2;
for(int i=row_begin-1;i<row_end;i++){
    s2=0;
    for(int j=0;j<data[i].size();j++){
        s2+=data[i][j]%(i+1);
    }
    answer= answer^s2;
}

 

row_begin-1 ์—์„œ row_end๊นŒ์ง€ ๋น„ํŠธ์—ฐ์‚ฐ์„ ํ•œ ๊ฐ’๋“ค์„ answer์— ์ €์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค

data[i][j]%(i+1)

 

๋Š” ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ์—์„œ S_i๋ฅผ i๋ฒˆ์งธ ํ–‰์˜ ํŠœํ”Œ(ํ–‰)์— ๋Œ€ํ•ด ๊ฐ ์ปฌ๋Ÿฝ์˜ ๊ฐ’์„ i๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€์ž…๋‹ˆ๋‹ค

 

 

 

 

๋ฐ˜์‘ํ˜•
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. ๋ฌธ์ œ



bandage : {๊ธฐ์ˆ ์˜ ์‹œ์ „ ์‹œ๊ฐ„, 1์ดˆ๋‹น ํšŒ๋ณต๋Ÿ‰,์ถ”๊ฐ€ ํšŒ๋ณต๋Ÿ‰}
health : ์ตœ๋Œ€ ์ฒด๋ ฅ
attacks : {๋ชฌ์Šคํ„ฐ์˜ ๊ณต๊ฒฉ ์‹œ๊ฐ„, ํ”ผํ•ด๋Ÿ‰}

Return : ๋ชจ๋“  ๊ณต๊ฒฉ์ด ๋๋‚œ ์งํ›„ ๋‚จ์€ ์ฒด๋ ฅ, ๋งŒ์•ฝ ์ฒด๋ ฅ์ด 0 ์ดํ•˜๋ฉด -1 ์ถœ๋ ฅ


2. ์ฝ”๋“œ

#include <string>
#include <vector>
#include <iostream>

using namespace std;

/*

Return
- ๋ชจ๋“  ๊ณต๊ฒฉ์ด ๋๋‚œ ์งํ›„ ๋‚จ์€ ์ฒด๋ ฅ
- ๋งŒ์•ฝ ์ฒด๋ ฅ์ด 0 ์ดํ•˜๊ฐ€ ๋˜์–ด ์ฃฝ์œผ๋ฉด -1

Rule
- ์ถ”๊ฐ€ ํšŒ๋ณต๋Ÿ‰ : bandage
- ์ตœ๋Œ€ ์ฒด๋ ฅ : health
- ๋ชฌ์Šคํ„ฐ์˜ ๊ณต๊ฒฉ ์‹œ๊ฐ„๊ณผ ํ”ผํ•ด๋Ÿ‰ : attacks
- t ์ดˆ ๋™์•ˆ 1์ดˆ๋งˆ๋‹ค x ๋งŒํผ์˜ ์ฒด๋ ฅ ํšŒ๋ณต
- t ์ดˆ ์—ฐ์†์œผ๋กœ ์„ฑ๊ณตํ•˜๋ฉด y๋งŒํผ ์ฒด๋ ฅ์„ ์ถ”๊ฐ€๋กœ ํšŒ๋ณต

*/

void heal(int& healStat,int healValue,int healthMax){
    healStat+=healValue;
    if(healStat>healthMax) healStat = healthMax;    
}

int solution(vector<int> bandage, int health, vector<vector<int>> attacks) {
    int answer = health;
    
    int endTime = attacks[attacks.size()-1][0];
    int combo=0,attackIdx=0;
    for(int i=0;i<=endTime;i++){
        if(attacks[attackIdx][0]==i){
            answer-=attacks[attackIdx][1];
            combo=0;
            attackIdx++;
        }
        else{
            combo++;
            heal(answer,bandage[1],health);
            if(combo==bandage[0]){
                //active combo
                heal(answer,bandage[2],health);
                combo=0;
            }
        }
        
        if(answer<=0){
            answer=-1;
            break;
        }
    }
    
    return answer;
}


3. ํ•ด์„ค

	 int endTime = attacks[attacks.size()-1][0];
    int combo=0,attackIdx=0;
    for(int i=0;i<=endTime;i++){
        if(attacks[attackIdx][0]==i){
            //cout<<"attackIdx: "<<attackIdx<<endl;
            answer-=attacks[attackIdx][1];
            combo=0;
            attackIdx++;
        }
        else{
            combo++;
            heal(answer,bandage[1],health);
            if(combo==bandage[0]){
                //active combo
                heal(answer,bandage[2],health);
                combo=0;
            }
        }
        
        if(answer<=0){
            answer=-1;
            break;
        }
        //cout<<"health: "<<health<<endl;
    }

endTime ์€ attacks ๋ฐฐ์—ด์˜ ๋งจ ๋งˆ์ง€๋ง‰ ์ธ์ž์˜ ๊ณต๊ฒฉ ์‹œ๊ฐ„์„ ๋ฐ›์•„์™”์Šต๋‹ˆ๋‹ค.
attacks๋Š” ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์ •๋ ฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋ฐ›์•„์˜จ ๋งˆ์ง€๋ง‰ ๊ณต๊ฒฉ ์‹œ๊ฐ„๊นŒ์ง€ ์ฒดํฌ๋ฅผ ํ•˜๋Š” for๋ฌธ์„ ์ž‘๋™์‹œํ‚ต๋‹ˆ๋‹ค.
combo ๋Š” ์ฝค๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ ๋ณ€์ˆ˜์ด๊ณ  attackIdx๋Š” attacks ๊ณต๊ฒฉํ•  ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
attackIdx๋Š” ๊ณต๊ฒฉ์„ ๋ฐ›์„ ๋•Œ, ๋‹ค์Œ ์ธ์ž๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

if(attacks[attackIdx][0]==i)

์œ„์˜ if๋ฌธ์€ attackIdx ์ˆœ์„œ์— ๋”ฐ๋ฅธ ๊ณต๊ฒฉ ์ˆœ์„œ๊ฐ€ i(์‹œ๊ฐ„)๊ณผ ๊ฐ™์€์ง€ ์ฒดํฌ ํ•˜๋Š” ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.
๋งŒ์•ฝ, attacks ๋ฐฐ์—ด์ด {{1,5},{3,10}} ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค๋ฉด
- ์‹œ๊ฐ„ 1์ผ ๋•Œ 5๋ฅผ ๊ณต๊ฒฉํ•œ๋‹ค.
- ์‹œ๊ฐ„ 3์ผ ๋•Œ 10์„ ๊ณต๊ฒฉํ•œ๋‹ค.
์ž…๋‹ˆ๋‹ค.
๋งŒ์•ฝ attackIdx ๊ฐ€ 0 ์ด๋ฉด, ์‹œ๊ฐ„ 1์ผ ๋•Œ ๊ณต๊ฒฉ์„ ์‹œ์ „ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

answer-=attacks[attackIdx][1];
combo=0;
attackIdx++;

๋งŒ์•ฝ i(์‹œ๊ฐ„)์ด ๋งž๋‹ค๋ฉด, ๊ณต๊ฒฉ์ด ์‹œ์ „๋ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ answer(ํ˜„์žฌ ์ฒด๋ ฅ)์„ attacks[attackIdx][1](ํ”ผํ•ด๋Ÿ‰)๋งŒํผ ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค.
์ฝค๋ณด๋Š” ๊นจ์ง€๊ธฐ ๋•Œ๋ฌธ์— 0์œผ๋กœ ๋ฐ”๊พธ์–ด์ค๋‹ˆ๋‹ค.
ํ•ด๋‹น ๊ณต๊ฒฉ์„ ๋ฐ›๊ณ  ๋‚˜์„œ๋Š” ๋‹ค์Œ ๊ณต๊ฒฉ์„ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋„๋ก attackIdx๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ค๋‹ˆ๋‹ค.

else{
	combo++;
	heal(answer,bandage[1],health);
	if(combo==bandage[0]){
		//active combo
		heal(answer,bandage[2],health);
		combo=0;
	}
}

๋งŒ์•ฝ ๊ณต๊ฒฉ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค๋ฉด ์น˜์œ ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.
์ฝค๋ณด์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ณ , ์น˜์œ ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

void heal(int& healStat,int healValue,int healthMax){
    healStat+=healValue;
    if(healStat>healthMax) healStat = healthMax;    
}

ํž์€ healthMax(์ตœ๋Œ€ ์ฒด๋ ฅ)์„ ๋„˜์–ด๊ฐ€๋ฉด ๋‹ค์‹œ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.

if(combo==bandage[0]){
	//active combo
	heal(answer,bandage[2],health);
	combo=0;
}

๋งŒ์•ฝ ์ฝค๋ณด๋ฅผ ๋‹ฌ์„ฑํ•˜๋ฉด ์ถ”๊ฐ€ ์ฒด๋ ฅ์ด ์น˜์œ ๋˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

if(answer<=0){
	answer=-1;
	break;
}

๋งŒ์•ฝ ์ฒด๋ ฅ์ด 0์ดํ•˜๊ฐ€ ๋œ๋‹ค๋ฉด for๋ฌธ์„ ๋ฒ—์–ด๋‚˜๊ณ  -1์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.









๋ฐ˜์‘ํ˜•
728x90

 

1. ๋ฌธ์ œ

 

์ „์ฒด ํ•™์ƒ์˜ ์ˆ˜ n,

์ฒด์œก๋ณต์„ ๋„๋‚œ๋‹นํ•œ ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด lost, 

์—ฌ๋ฒŒ์˜ ์ฒด์œก๋ณต์„ ๊ฐ€์ ธ์˜จ ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด reserve๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ,

 ์ฒด์œก์ˆ˜์—…์„ ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ํ•™์ƒ์˜ ์ตœ๋Œ“๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

2. ์ฝ”๋“œ

#include <string>
#include <vector>
#include <iostream>

using namespace std;

//n : ์ „์ฒด ํ•™์ƒ์˜ ์ˆ˜
//lost : ์ฒด์œก๋ณต์„ ๋„๋‚œ๋‹นํ•œ ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ ๋ฐฐ์—ด
//reserve : ์—ฌ๋ฒŒ์˜ ์ฒด์œก๋ณต์„ ๊ฐ€์ ธ์˜จ ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ ๋ฐฐ์—ด
int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    
    //์•ž ๋’ค ์ˆ˜๋ฅผ ๋น„๊ตํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ ฌ ๊ณผ์ •์ด ๊ผญ ํ•„์š”ํ•จ
    sort(lost.begin(),lost.end());
    sort(reserve.begin(),reserve.end());
    
    //๋‘๊ฐ€์ง€ ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ฒกํ„ฐ์˜ ์‚ฝ์ž…,์‚ญ์ œ๋ฅผ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ 
    //์ฒดํฌ๋ฅผ ํ–ˆ๋Š”์ง€ ํ‘œ์‹œํ•ด์คŒ
    bool isChecked[31]={false};
    bool isCheckedReserve[31]={false};
    int coverNum=0;
    
    //๋จผ์ € ๊ฐ™์€ ๊ฐ’๋“ค์€ ๋ชจ๋‘ true๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๋นŒ๋ ค์คŒ์œผ๋กœ์จ ๋ฉ”๊ฟ€์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ˆ˜๋ฅผ ์ฆ๊ฐ€
    for(int i=0;i<reserve.size();i++)
    {
        for(int j=0;j<lost.size();j++){
            if(reserve[i]==lost[j]){
                isChecked[j]=true;
                isCheckedReserve[i]=true;
                coverNum++;
            }
        }
    }
    //๊ทธ ํ›„ ๋‚จ์€ ๊ฒƒ๋“ค์„ ์ด์šฉํ•˜์—ฌ ์•ž๋’ค์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฉ”๊ฟ€์ˆ˜ ์žˆ๋Š” ํ•™์ƒ ์ˆ˜ ๊ณ„์‚ฐ
    for(int i=0;i<reserve.size();i++){
        if(coverNum==lost.size())break;
        for(int j=0;j<lost.size();j++){
            if(isChecked[j]||isCheckedReserve[i]) continue;
            else if(lost[j]-1==reserve[i]||lost[j]+1==reserve[i])
            {
                coverNum++;
                isChecked[j]=true;
                isCheckedReserve[i]=true;
            }
        }
    }
    
    //์ •๋‹ต = ์ดํ•™์ƒ์ˆ˜ - ์žƒ์–ด๋ฒ„๋ฆฐ ์ฒด์œก๋ณต ์ˆ˜ + ๋ฉ”๊พผ ํ•™์ƒ ์ˆ˜
    answer = n-lost.size()+coverNum;
    
    return answer;
}

 

3. ํ•ด์„ค

//n : ์ „์ฒด ํ•™์ƒ์˜ ์ˆ˜
//lost : ์ฒด์œก๋ณต์„ ๋„๋‚œ๋‹นํ•œ ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ ๋ฐฐ์—ด
//reserve : ์—ฌ๋ฒŒ์˜ ์ฒด์œก๋ณต์„ ๊ฐ€์ ธ์˜จ ํ•™์ƒ๋“ค์˜ ๋ฒˆํ˜ธ ๋ฐฐ์—ด
int solution(int n, vector<int> lost, vector<int> reserve) {
    int answer = 0;
    
    //์•ž ๋’ค ์ˆ˜๋ฅผ ๋น„๊ตํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ ฌ ๊ณผ์ •์ด ๊ผญ ํ•„์š”ํ•จ
    sort(lost.begin(),lost.end());
    sort(reserve.begin(),reserve.end());

๋จผ์ € ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ ์˜ˆ์™ธ ์‚ฌํ•ญ์„ ์ œ์™ธํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ ฌ์„ ์ง„ํ–‰ํ•ด์ค€๋‹ค. ์žƒ์–ด๋ฒ„๋ฆฐ ์‚ฌ๋žŒ๋“ค๊ณผ ์—ฌ๋ฒŒ์˜ ์ฒด์œก๋ณต์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๋ฐฐ์—ด์„ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•œ๋‹ค.

    //๋‘๊ฐ€์ง€ ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ฒกํ„ฐ์˜ ์‚ฝ์ž…,์‚ญ์ œ๋ฅผ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ 
    //์ฒดํฌ๋ฅผ ํ–ˆ๋Š”์ง€ ํ‘œ์‹œํ•ด์คŒ
    bool isChecked[31]={false};
    bool isCheckedReserve[31]={false};
    int coverNum=0;
    
    //๋จผ์ € ๊ฐ™์€ ๊ฐ’๋“ค์€ ๋ชจ๋‘ true๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๋นŒ๋ ค์คŒ์œผ๋กœ์จ ๋ฉ”๊ฟ€์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ˆ˜๋ฅผ ์ฆ๊ฐ€
    for(int i=0;i<reserve.size();i++)
    {
        for(int j=0;j<lost.size();j++){
            if(reserve[i]==lost[j]){
                isChecked[j]=true;
                isCheckedReserve[i]=true;
                coverNum++;
            }
        }
    }

๊ฐ๊ฐ ์ฒดํฌ๋ฅผ ํ–ˆ๋Š”์ง€ ์•ˆํ–ˆ๋Š”์ง€ ๊ธฐ๋กํ•  ๋ฐฐ์—ด ๋‘๊ฐœ๋ฅผ ์ค€๋น„ํ•œ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋ฒŒ์„ ์ด๋ฏธ ๋นŒ๋ ค์ฃผ๊ณ , ๋Œ€์—ฌ ๋ฐ›์€ ์‚ฌ๋žŒ์˜ ๊ฒฝ์šฐ ์ฒดํฌํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋งจ ์ฒ˜์Œ ์—ฌ๋ฒŒ์„ ์ค€๋น„ํ•œ ํ•™์ƒ์ด ์žƒ์–ด๋ฒ„๋ ธ์„ ๊ฒฝ์šฐ๋ฅผ ์ฒดํฌํ•ด์ค€๋‹ค. (reserve[i]==lost[j]) ์ด ๊ฒฝ์šฐ

    //๊ทธ ํ›„ ๋‚จ์€ ๊ฒƒ๋“ค์„ ์ด์šฉํ•˜์—ฌ ์•ž๋’ค์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฉ”๊ฟ€์ˆ˜ ์žˆ๋Š” ํ•™์ƒ ์ˆ˜ ๊ณ„์‚ฐ
    for(int i=0;i<reserve.size();i++){
        if(coverNum==lost.size())break;
        for(int j=0;j<lost.size();j++){
            if(isChecked[j]||isCheckedReserve[i]) continue;
            else if(lost[j]-1==reserve[i]||lost[j]+1==reserve[i])
            {
                coverNum++;
                isChecked[j]=true;
                isCheckedReserve[i]=true;
            }
        }
    }
    
    //์ •๋‹ต = ์ดํ•™์ƒ์ˆ˜ - ์žƒ์–ด๋ฒ„๋ฆฐ ์ฒด์œก๋ณต ์ˆ˜ + ๋ฉ”๊พผ ํ•™์ƒ ์ˆ˜
    answer = n-lost.size()+coverNum;
    
    return answer;
}

๊ทธ ํ›„ ์ฒดํฌํ•˜์ง€ ์•Š์€ ๊ฐ’๋“ค์„ ๋‹ค์‹œ ์ฒดํฌํ•ด์ค€๋‹ค. ์ด ๊ฒฝ์šฐ ์—ฌ๋ฒŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ•™์ƒ์˜ id๋ฒˆํ˜ธ ์•ž๋’ค์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ์ฒดํฌํ•ด์ฃผ๋ฉด์„œ ๋งŒ์•ฝ ์—ฌ๋ฒŒ์„ ๋นŒ๋ ค์ฃผ๋ฉด coverNum์˜ ๊ฐ’์„ ๋†’์—ฌ์ค€๋‹ค. ์ด๋•Œ coverNum์€ ๋ง๊ทธ๋Œ€๋กœ ์–ผ๋งŒํผ ์žƒ์–ด๋ฒ„๋ฆฐ ํ•™์ƒ๋“ค์˜ ๊ณต๋ฐฑ์„ ๋ฉ”๊ฟ€์ˆ˜ ์žˆ๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ •๋‹ต์€ ์ดํ•™์ƒ์ˆ˜์— ์žƒ์–ด๋ฒ„๋ฆฐ ์ฒด์œก๋ณต ์ˆ˜๋ฅผ ๋นผ๊ณ  ๋ฉ”๊พผ ํ•™์ƒ ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•
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/86971

n๊ฐœ์˜ ์†ก์ „ํƒ‘์ด ์ „์„ ์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด ์ „์„ ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ๋Š์–ด์„œ ํ˜„์žฌ์˜ ์ „๋ ฅ๋ง ๋„คํŠธ์›Œํฌ๋ฅผ 2๊ฐœ๋กœ ๋ถ„ํ• ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ๋‘ ์ „๋ ฅ๋ง์ด ๊ฐ–๊ฒŒ ๋˜๋Š” ์†ก์ „ํƒ‘์˜ ๊ฐœ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•˜๊ฒŒ ๋งž์ถ”๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์†ก์ „ํƒ‘์˜ ๊ฐœ์ˆ˜ n, ๊ทธ๋ฆฌ๊ณ  ์ „์„  ์ •๋ณด wires๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ „์„ ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ๋Š์–ด์„œ ์†ก์ „ํƒ‘ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋น„์Šทํ•˜๋„๋ก ๋‘ ์ „๋ ฅ๋ง์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ, ๋‘ ์ „๋ ฅ๋ง์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์†ก์ „ํƒ‘ ๊ฐœ์ˆ˜์˜ ์ฐจ์ด(์ ˆ๋Œ€๊ฐ’)๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

2. ์ฝ”๋“œ

#include <string>
#include <vector>

using namespace std;

//dfs, visited ๋ฐฉ๋ฒ•

int graph[101][101];
int visited[101];

int dfs(int cur, int n)
{
    if(visited[cur]) return 0;      //ํ•œ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ๊ณณ์€ ์žฌ๋ฐฉ๋ฌธ X
    int child=1;      //ํ•˜์œ„ ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜
    visited[cur]=true;
    for(int i=1;i<=n;i++)
    {
        if(graph[cur][i])       //์—ฐ๊ฒฐ, ๊ฐ„์  ์—†๋Š” ๊ณณ๋งŒ
        {
            child+=dfs(i,n);
        }
    }
    return child;
}

void setGraph(int x,int y,int value)
{
    graph[x][y]=value;
    graph[y][x]=value;
}

int solution(int n, vector<vector<int>> wires) {
    int answer = 101;
    
    //์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์†ก์ „ํƒ‘ 1๋กœ ์ดˆ๊ธฐํ™”
    for(int i=0;i<wires.size();i++){
        setGraph(wires[i][0],wires[i][1],1);
    }
    
    for(int i=0;i<wires.size();i++){
        //๋ฐฉ๋ฌธ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
        fill_n(visited,101,false);
        
        //๋Š์„ ์ „์„  0์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ -> ์ „์„  ๋Š๊ธฐ
        setGraph(wires[i][0],wires[i][1],0);

        vector<int> diff;
        for(int i=1;i<=n;i++)
        {
            int tmp=dfs(i,n);       //๊นŠ์ด ํƒ์ƒ‰
            if(!tmp)continue;       //๋ฐฉ๋ฌธํ•œ ๊ฒฝ์šฐ ์ƒ๋žต
            diff.push_back(tmp);
        }
        answer = min(answer, abs(diff[0]-diff[1]));
        if(answer==0)break;
        //์›์ƒํƒœ๋กœ ๋Œ๋ ค๋†“๊ธฐ
        setGraph(wires[i][0],wires[i][1],1);
    }
    
    return answer;
}

 

3. ํ•ด์„ค

//dfs, visited ๋ฐฉ๋ฒ•

int solution(int n, vector<vector<int>> wires) {
    int answer = 101;
    
    //์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์†ก์ „ํƒ‘ 1๋กœ ์ดˆ๊ธฐํ™”
    for(int i=0;i<wires.size();i++){
        setGraph(wires[i][0],wires[i][1],1);
    }
    
    for(int i=0;i<wires.size();i++){
        //๋ฐฉ๋ฌธ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
        fill_n(visited,101,false);
        
        //๋Š์„ ์ „์„  0์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ -> ์ „์„  ๋Š๊ธฐ
        setGraph(wires[i][0],wires[i][1],0);

        vector<int> diff;
        for(int i=1;i<=n;i++)
        {
            int tmp=dfs(i,n);       //๊นŠ์ด ํƒ์ƒ‰
            if(!tmp)continue;       //๋ฐฉ๋ฌธํ•œ ๊ฒฝ์šฐ ์ƒ๋žต
            diff.push_back(tmp);
        }
        answer = min(answer, abs(diff[0]-diff[1]));
        if(answer==0)break;
        //์›์ƒํƒœ๋กœ ๋Œ๋ ค๋†“๊ธฐ
        setGraph(wires[i][0],wires[i][1],1);
    }
    
    return answer;
}

dfs๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์–ด์•ผํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ฒ˜์Œ์— ๋ฌธ์ œ๋ฅผ ์ ‘๊ทผํ•  ๋•Œ dp๋กœ ์ ‘๊ทผํ•˜์—ฌ์„œ ๋…ธ๋“œ์˜ ํ•˜์œ„ ๊ฐฏ์ˆ˜๋ฅผ ๋ˆ„์ ํ•˜์˜€์—ˆ๋Š”๋ฐ ํ•ด๋‹น ๊ฒฝ์šฐ๋Š” ๋…ธ๋“œ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ์ง€ ์•Š์„ ๋•Œ ์ ํ•ฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.

ํ‘ธ๋Š” ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. ๋จผ์ € ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์†ก์ „ํƒ‘๋“ค์„ 2์ฐจ์› ๋ฐฐ์—ด์— 1๋กœ ํ‘œ์‹œํ•ด์ค๋‹ˆ๋‹ค.

    //์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์†ก์ „ํƒ‘ 1๋กœ ์ดˆ๊ธฐํ™”
    for(int i=0;i<wires.size();i++){
        setGraph(wires[i][0],wires[i][1],1);
    }

2. 0~n๋ฒˆ์งธ ์†ก์ „ํƒ‘์„ ๊ฐ๊ฐ ๋Š๋Š” for ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ n๋ฒˆ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.

    for(int i=0;i<wires.size();i++){

3. ๋ฐฉ๋ฌธ ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๊ณ , 2์ฐจ์› ๋ฐฐ์—ด์—์„œ ๋Š์„ ์†ก์ „ํƒ‘์„ 0์œผ๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

        //๋ฐฉ๋ฌธ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
        fill_n(visited,101,false);
        
        //๋Š์„ ์ „์„  0์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ -> ์ „์„  ๋Š๊ธฐ
        setGraph(wires[i][0],wires[i][1],0);

4. dfs ํƒ์ƒ‰์„ ํ†ตํ•ด ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€์ง€ ์•Š์€ ๊ณณ๊นŒ์ง€ ํƒ์ƒ‰์„ ํ•˜์—ฌ ํ•˜์œ„ ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๊ทธ ๊ฐ’๋“ค์˜ ์ฐจ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

        vector<int> diff;
        for(int i=1;i<=n;i++)
        {
            int tmp=dfs(i,n);       //๊นŠ์ด ํƒ์ƒ‰
            if(!tmp)continue;       //๋ฐฉ๋ฌธํ•œ ๊ฒฝ์šฐ ์ƒ๋žต
            diff.push_back(tmp);
        }
        answer = min(answer, abs(diff[0]-diff[1]));
        if(answer==0)break;
        //์›์ƒํƒœ๋กœ ๋Œ๋ ค๋†“๊ธฐ
        setGraph(wires[i][0],wires[i][1],1);

 

 

 

 

๋ฐ˜์‘ํ˜•
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 ๊ฐ’์„ ์‚ฝ์ž…ํ•œ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•
728x90

1. ๋ฌธ์ œ

์›๋ณธ ๋งํฌ : https://school.programmers.co.kr/learn/courses/30/lessons/42842

 

Leo๊ฐ€ ๋ณธ ์นดํŽซ์—์„œ ๊ฐˆ์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ brown, ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ yellow๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์นดํŽซ์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

๊ฐˆ์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ brown์€ 8 ์ด์ƒ 5,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ yellow๋Š” 1 ์ด์ƒ 2,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
์นดํŽซ์˜ ๊ฐ€๋กœ ๊ธธ์ด๋Š” ์„ธ๋กœ ๊ธธ์ด์™€ ๊ฐ™๊ฑฐ๋‚˜, ์„ธ๋กœ ๊ธธ์ด๋ณด๋‹ค ๊น๋‹ˆ๋‹ค.

 

2. ์ฝ”๋“œ

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int brown, int yellow) {
    vector<int> answer;
    
    //์™„์ „ ํƒ์ƒ‰
    int sum = brown+yellow;
    for(int i=2;i<sum;i++){
        if(sum%i!=0) continue;
        else
        {
            if((i-2)*(sum/i-2)==yellow)
            {
                answer.push_back(sum/i);
                answer.push_back(i);
                break;
            }
            else continue;
        }
    }
    
    return answer;
}

 

3. ํ•ด์„ค

//์™„์ „ ํƒ์ƒ‰
    int sum = brown+yellow;
    for(int i=2;i<sum;i++){
        if(sum%i!=0) continue;

๋จผ์ € brown+yellow๋ฅผ ๋”ํ•˜๋ฉด ๋ชจ๋“  ํƒ€์ผ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒ€์ผ์˜ ๊ฐฏ์ˆ˜๋Š” ๊ฐ€๋กœx์„ธ๋กœ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ธฐ์— ๊ตฌํ•ด์ค๋‹ˆ๋‹ค.

ํƒ€์ผ์˜ ์„ธ๋กœ ๊ธธ์ด๋Š” 1๋ณด๋‹ค ์ปค์•ผํ•˜๊ธฐ์—(0์ด๋‚˜ 1์ธ ๊ฒฝ์šฐ ๋…ธ๋ž€์ƒ‰ ๊ตฌ์—ญ์ด ์ƒ๊ธธ ์ˆ˜ ์—†์Œ) i=2๋ถ€ํ„ฐ for๋ฌธ์„ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.

if(sum%i!=0) : ๋งŒ์•ฝ ๋‚˜๋ˆ„์–ด ์งˆ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ๊ฐ€๋กœ ์„ธ๋กœ๋ฅผ ๊ตฌํ• ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

        else
        {
            if((i-2)*(sum/i-2)==yellow)
            {
                answer.push_back(sum/i);
                answer.push_back(i);
                break;
            }
            else continue;
        }
    }

๋‚˜๋ˆ„์–ด์ง€๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด, ํ•ด๋‹น ๊ฐ€๋กœ ์„ธ๋กœ์˜ ๊ธธ์ด์—์„œ 2์”ฉ ๋นผ์„œ yellow ์˜์—ญ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ yellow ๊ฐฏ์ˆ˜๊ฐ€ ๋งž๋‹ค๋ฉด ํ•ด๋‹น ๊ฐ’๋“ค์„ answer์— ์ €์žฅํ•ด์ค๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•
728x90

1. ๋ฌธ์ œ

 

ํ•œ์ž๋ฆฌ ์ˆซ์ž๊ฐ€ ์ ํžŒ ์ข…์ด ์กฐ๊ฐ์ด ํฉ์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค.

ํฉ์–ด์ง„ ์ข…์ด ์กฐ๊ฐ์„ ๋ถ™์—ฌ ์†Œ์ˆ˜๋ฅผ ๋ช‡ ๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋ ค ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ ์ข…์ด ์กฐ๊ฐ์— ์ ํžŒ ์ˆซ์ž๊ฐ€ ์ ํžŒ ๋ฌธ์ž์—ด numbers๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ข…์ด ์กฐ๊ฐ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์†Œ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

2. ์ฝ”๋“œ

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

int solution(string numbers) {
    int answer=0;
    
    //next_permutation์„ ์‚ฌ์šฉ
    //์ˆœ์—ด ๊ณ„์‚ฐ์—์„œ 1์ž๋ฆฌ,2์ž๋ฆฌ ~ n์ž๋ฆฌ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    sort(numbers.begin(),numbers.end());
    vector<unsigned int> nums;
    string sub;
    do {
        for (int i = 1; i <=  numbers.size(); i++)
        {
            sub = numbers.substr(0, i);
            nums.push_back(stoi(sub));
        }
    } while (next_permutation(numbers.begin(), numbers.end()));
    
    //์ค‘๋ณต๋œ ์ˆซ์ž ์ œ๊ฑฐํ•˜๊ธฐ
    sort(nums.begin(), nums.end());
    nums.erase(unique(nums.begin(),nums.end()), nums.end());
    
    //์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์ฒด ๊ตฌํ•˜๊ธฐ
    unsigned int nn=9999999;
    vector<bool> isPrimeNum(nn+1);
    isPrimeNum[1] = true; // 1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ true
    for(unsigned int i = 2; i <= sqrt(nn); i++){
        if(isPrimeNum[i]) continue; // ์ด๋ฏธ true๋ฉด ๊ณ„์‚ฐ ์ œ์™ธ
        for(unsigned int j = i + i; j <= nn; j += i) // i๋ฅผ ์ œ์™ธํ•œ i์˜ ๋ฐฐ์ˆ˜๋“ค์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
            isPrimeNum[j] = true;
    }

    for(int i=0;i<nums.size();i++){
	    if(!isPrimeNum[nums[i]]&nums[i]>0)      //0์ธ ๊ฒฝ์šฐ ์ œ์™ธ
            answer++;
    }
    
    return answer;
}

 

3. ํ•ด์„ค

    //next_permutation์„ ์‚ฌ์šฉ
    //์ˆœ์—ด ๊ณ„์‚ฐ์—์„œ 1์ž๋ฆฌ,2์ž๋ฆฌ ~ n์ž๋ฆฌ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ
    sort(numbers.begin(),numbers.end());
    vector<unsigned int> nums;
    string sub;
    do {
        for (int i = 1; i <=  numbers.size(); i++)
        {
            sub = numbers.substr(0, i);
            nums.push_back(stoi(sub));
        }
    } while (next_permutation(numbers.begin(), numbers.end()));

๋จผ์ € ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ string์„ ์ •๋ ฌํ•ด์ฃผ๊ณ , next_permutation ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด 1~n์ž๋ฆฌ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

    //์ค‘๋ณต๋œ ์ˆซ์ž ์ œ๊ฑฐํ•˜๊ธฐ
    sort(nums.begin(), nums.end());
    nums.erase(unique(nums.begin(),nums.end()), nums.end());

๊ทธ ํ›„, ์ค‘๋ณต ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ค‘๋ณต๋œ ์ˆซ์ž๋ฅผ ์ œ๊ฑฐํ•ด์ค๋‹ˆ๋‹ค.

    //์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์ฒด ๊ตฌํ•˜๊ธฐ
    unsigned int nn=9999999;
    vector<bool> isPrimeNum(nn+1);
    isPrimeNum[1] = true; // 1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ true
    for(unsigned int i = 2; i <= sqrt(nn); i++){
        if(isPrimeNum[i]) continue; // ์ด๋ฏธ true๋ฉด ๊ณ„์‚ฐ ์ œ์™ธ
        for(unsigned int j = i + i; j <= nn; j += i) // i๋ฅผ ์ œ์™ธํ•œ i์˜ ๋ฐฐ์ˆ˜๋“ค์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
            isPrimeNum[j] = true;
    }

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์ฒด์˜ ํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ๋ฒ”์œ„ ๋‚ด์—์„œ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’๋“ค์„ true๋กœ ํ‘œ์‹œํ•ด์ค๋‹ˆ๋‹ค.

    for(int i=0;i<nums.size();i++){
	    if(!isPrimeNum[nums[i]]&nums[i]>0)      //0์ธ ๊ฒฝ์šฐ ์ œ์™ธ
            answer++;
    }

์†Œ์ˆ˜ ํŒ๋ณ„ vector isPrimeNum์„ ๊ฐ€์ง€๊ณ  ๊ฒฝ์šฐ์˜ ์ˆ˜๋“ค์˜ ๋ฆฌ์ŠคํŠธ nums์˜ ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ๋งŒ์•ฝ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ(false) answer์„ ํ•œ๊ฐœ ๋Š˜๋ ค์ค๋‹ˆ๋‹ค.

๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 0์ธ๊ฒฝ์šฐ๋Š” ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋–„๋ฌธ์— ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•

+ Recent posts