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์€ ๋ง๊ทธ๋Œ€๋กœ ์–ผ๋งŒํผ ์žƒ์–ด๋ฒ„๋ฆฐ ํ•™์ƒ๋“ค์˜ ๊ณต๋ฐฑ์„ ๋ฉ”๊ฟ€์ˆ˜ ์žˆ๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜์ด๋‹ค.

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

 

 

 

๋ฐ˜์‘ํ˜•

+ Recent posts