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์ธ๊ฒฝ์šฐ๋Š” ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋–„๋ฌธ์— ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•
728x90

ํ๋ฅผ ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ค„์„ ์„œ์„œ ํ•˜๋Š” ์‹ธ์ธํšŒ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์œ ๋ช… ๊ฐ€์ˆ˜์˜ ์‹ธ์ธํšŒ๊ฐ€ ์—ด๋ฆฐ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž
๋‚˜๋Š” ๊ฐ€์ˆ˜์˜ ์‹ธ์ธํšŒ์— ๋‹น์ฒจ์ด ๋˜์—ˆ๊ณ  ํ˜„์žฅ์—์„œ 3๋ฒˆ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌ๋ฐ›์•˜๋‹ค.
๋‹ค๋ฅธ ํŒฌ๋“ค์€ 1~20๋ฒˆ์˜ ๋ฒˆํ˜ธ๋ฅผ ๋ถ€์—ฌ๋ฐ›์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์˜€์„ ๋•Œ, ์ง„ํ–‰์ž๊ฐ€ 1๋ฒˆ๋ถ€ํ„ฐ ์‹ธ์ธ์„ ๋ฐ›์œผ๋Ÿฌ ์˜ค๋ผ๊ณ  ๋ถ€๋ฅผ ๊ฒƒ์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  2~20๋ฒˆ์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ฐจ๋ก€๋กœ ์ค„์„ ์„œ๋ผ๊ณ  ํ•  ๊ฒƒ์ด๊ณ  ๊ทธ ๋‹ค์Œ ์ฐจ๋ก€๋Š” 2๋ฒˆ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์‹ธ์ธ์„ ๋ฐ›์œผ๋Ÿฌ ์ค„์„ ์ดํƒˆํ•  ๊ฒƒ์ด๋‹ค.
์ด๊ฒŒ ๋ฐ”๋กœ ํ์˜ ๊ฐœ๋…์ด๋‹ค! FIFO(First In First Out) ์„ ์ž…์„ ์ถœ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋Š” ๋จผ์ € ๋น ์ ธ๋‚˜์˜จ๋‹ค. ์ฆ‰ 2๋ฒˆ์ด ๋งจ ์•ž์— ์žˆ๋Š”๋ฐ 3๋ฒˆ์ด ๋จผ์ € ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 




ํ๊ฐ€ ์“ฐ์ด๋Š” ๊ตฌ์กฐ๋Š” ์–ด๋””์— ์žˆ์„ ๊นŒ? ๋ฏธ๋ฃจ์–ด ์ง์ž‘ํ•ด๋ณด๊ฑด๋ฐ
๋ช…์ ˆ๋‚  ๋‚ด๋ ค๊ฐ€๋Š” KTX ์˜ˆ๋งค๋ฅผ ํ•  ๋•Œ, ๋‚ด ์•ž์˜ ๋Œ€๊ธฐ์ž 00๋ช…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๋ณธ ์  ์žˆ๋Š”๊ฐ€?
์•„๋งˆ๋„ ๊ทธ๋Ÿฌํ•œ ๊ณณ์— ์“ฐ์ผ ๊ฒƒ ๊ฐ™๋‹ค.
๋ฌผ๋ก  ์ด๊ฒƒ ๋ง๊ณ ๋„ ๋งŽ์€ ๊ณณ์— ์“ฐ์ด๊ฒ ์ง€๋งŒ ๊ฐ€์žฅ ๊ฐ€์‹œ์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋Š๋‚Œ์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค.

๋ฐ˜์‘ํ˜•

'์•Œ๊ณ ๋ฆฌ์ฆ˜ > ์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

2. ์Šคํƒ  (0) 2023.09.07
1. ๋ฆฌ์ŠคํŠธ  (0) 2023.09.05
728x90

์Šคํƒ์€ ๊ต‰์žฅํžˆ ๋งŽ์ด ์“ฐ์ด๋Š” ๊ฐœ๋…์ด๋‹ค.
’๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋‚˜์˜ค๋Š”(FILO, First In Last Out) ๊ตฌ์กฐ‘ ์ด๋‹ค.
๋ฐฐ์—ด๊ณผ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ๋‘˜๋‹ค ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ๋ฐ ์ด์ „ ํฌ์ŠคํŒ…์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด
ํƒ์ƒ‰์€ ๋น ๋ฅธ ๋ฐฐ์—ด, ์šฉ๋Ÿ‰์˜ ์ œํ•œ์ด ์ž์œ ๋กœ์šด ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ์ด๊ธฐ์— ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์“ฐ์ผ ๋“ฏํ•˜๋‹ค.

์Šคํƒ์€ ๋ง๊ทธ๋Œ€๋กœ ์Œ“๋‹ค ์ธ๋ฐ, ๊ฐ€์žฅ ์™€๋‹ฟ๋Š” ๊ฒƒ์€ ํ”„๋ง๊ธ€์Šค ํ†ต์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค..!
๋ฌผ๋ก  ํ”„๋ง๊ธ€์Šค๋ฅผ ๋’ค์ง‘์œผ๋ฉด ์šฐ๋ฅด๋ฅด ์Ÿ์•„์ ธ๋‚˜์˜จ๋‹ค๋งŒ์€.. ํ”„๋ง๊ธ€์Šค๋Š” ์œ„์—์„œ๋ถ€ํ„ฐ ๊บผ๋‚ด์„œ ์ œ์ผ ๋ฐ‘์—๊นŒ์ง€ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๊ณผ์ž์ด๋‹ค.
๋ฐ˜๋Œ€๋กœ ํ”„๋ง๊ธ€์Šค ํ†ต์— ๊ณผ์ž๋ฅผ ๋‹ค์‹œ ๋„ฃ๋Š”๋‹ค๋ฉด ๋งจ ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ๊ณผ์ž๋ถ€ํ„ฐ ๊บผ๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์Šคํƒ PUSH(์™ผ) ์Šคํƒ POP(์˜ค)


์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ์„œ ์–ด๋–ค ๊ฒƒ์„ ๋งŒ๋“ค๋ฉด ์œ ์šฉํ• ๊นŒ ํ•˜๊ณ  ์ƒ๊ฐํ•˜์—ฌ๋ณด์•˜๋Š”๋ฐ
์•„๋ฌด๋ž˜๋„ Undo, Redo ์•„๋‹๊นŒ ์‹ถ๋‹ค.
ํ•œ๊ธ€(.hwp)์—์„œ๋„ ์ž˜ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋‹จ์ถ•ํ‚ค Ctrl+Z ๋ฅผ ํ†ตํ•ด ์ด์ „์˜ ์ž‘์—…์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ธฐ๋Šฅ ๋ง์ด๋‹ค.
์ด์ „์˜ ์ž‘์—…๋“ค์„ ํ•œ๊ฐœํ•œ๊ฐœ์”ฉ ์Œ“์•„๋†“๊ณ , ๋งŒ์•ฝ ๋˜๋Œ์•„๊ฐ€๊ธฐ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด ํ•œํ์— ์ž‘์—…ํ–ˆ๋˜ ๊ฒƒ๋“ค์„ ์ œ๊ฑฐํ•˜๋ฉด ์ด์ „์˜ ์ž‘์—…์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

ํ–‰๋™ ์ทจ์†Œํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•

'์•Œ๊ณ ๋ฆฌ์ฆ˜ > ์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

3. ํ  (0) 2023.09.12
1. ๋ฆฌ์ŠคํŠธ  (0) 2023.09.05
728x90

ํ”„๋กœ๊ทธ๋žจ์„ ์งœ๋‹ค๋ณด๋ฉด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ๋•Œ๊ฐ€ ๋งŽ์•„์ง„๋‹ค.

๋ฐฐ์—ด์€ ํฌ๊ธฐ๊ฐ€ ํ•œ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฐ„์ด ๋ชจ์ž๋ผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š”๋ฐ, C++์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ STL์˜ vector๋ฅผ ๋ณดํ†ต ๋– ์˜ฌ๋ฆฐ๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ๋„ ๊ทธ๋žฌ๊ณ 

ํ•˜์ง€๋งŒ STL์˜ vector ๊ฒฝ์šฐ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ์ž์œ ์ž์žฌ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋ฐฐ์—ด ํ˜•ํƒœ์—์„œ ๋ฐฐ์—ด์ด ๊ฐ€๋“ ์ฐฐ ๋•Œ๋งˆ๋‹ค ํฌ๊ธฐ๋ฅผ 1.5๋ฐฐ ~ 2๋ฐฐ (์ปดํŒŒ์ผ๋Ÿฌ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„) ๋Š˜๋ฆฐ ํ›„ ๋‹ค์‹œ ์˜ฎ๊ฒจ๋‹ด๋Š” ํ˜•์‹์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ž‘์€ ๋‹ค๋ฅธ ๊ฐœ๋…์ด๋‹ค.

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” C์—์„œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ํ•œ์ •๋˜์–ด ์žˆ๋Š” ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ ์ž ๋งŒ๋“  ๊ฐœ๋…์ด๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์žฅ๋‹จ์ ์ด ์žˆ๊ธฐ์— ์†Œ๊ฐœํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

 

๐Ÿ”น01. ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ

์œ ์—ฐํ•˜๊ฒŒ ํฌ๊ธฐ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ  '๋ฆฌ์ŠคํŠธ(list)'๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ์ด ์ค‘์—์„œ ๊ฐ€์žฅ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

'๋ฆฌ์ŠคํŠธ' ๋‚ด์˜ ๊ฐ ์š”์†Œ๋Š” '๋…ธ๋“œ(Node)' ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

'๋งํฌ๋“œ'๋Š” '์—ฐ๊ฒฐ๋œ' ์ด๋ผ๋Š” ๋œป์ด๋‹ค. ์ฆ‰ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ์—ฐ๊ฒฐ๋œ ๋ฆฌ์ŠคํŠธ์ด๋‹ค.

 

๊ตฌ์กฐ

๋…ธ๋“œ์˜ ๊ตฌ์กฐ

๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ์™€ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง„ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

ํฌ์ธํ„ฐ๋Š” ๋’ค์—์˜ฌ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฅดํ‚ด์œผ๋กœ์จ ํ•ด๋‹น ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ๊ตฌ์กฐ

์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ํ—ค๋“œ, ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ํ…Œ์ผ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋งˆ์น˜ KTX ๊ธฐ์ฐจ๋ฅผ ์ด์–ด๋ถ™์ด๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋’ค๋ฅผ ์ด์–ด์„œ ๋ถ™์ธ๋‹ค.

๊ธฐ์ฐจ ์‚ฌ์ด์˜ ์ด์Œ์ƒˆ ์—ญํ™œ์„ ํ•˜๋Š” ๊ณ ๋ฆฌ๊ฐ€ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ๊ฐ€ ํ•˜๋Š” ์—ญํ• ์ด๋‹ค.

 

struct Node
{
    Data data;		//๋ฐ์ดํ„ฐ
    struct Node* NextNode;	//๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
}

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฝ”๋“œ๋ธ”๋ก์ด ์ข…๋ฃŒ๋จ์— ๋”ฐ๋ผ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋„๋ก malloc() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ• ๋‹น์„ ํ•ด์ค€๋‹ค.

์ด๋Ÿฌํ•œ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ํƒ์ƒ‰ ์—ฐ์‚ฐ์—์„œ ์•ฝ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์•ž์—์„œ๋ถ€ํ„ฐ ์ญˆ์šฑ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ์ด๋‹ค ๋ณด๋‹ˆ HEAD๋ถ€ํ„ฐ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•ด์„œ ๋งŒ์•ฝ 10๊ฐœ์˜ ๋…ธ๋“œ ์ค‘ 10๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ํ•œ๋‹ค๋ฉด 1๋ฒˆ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•ด์„œ 10๋ฒˆ๊นŒ์ง€ ๋‹ค๋‹ฌ์•„์•ผํ•œ๋‹ค.

๋”ฐ๋ผ์„œ n๊ฐœ์˜ ๋…ธ๋“œ ์ค‘ n๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ํ•œ๋‹ค๋ฉด n๋ฒˆ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•ด์•ผํ•˜๊ธฐ์— ๋น„์šฉ์ด ํฌ๊ณ  ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.

 

โ—๋ฐฐ์—ด์— ๋น„ํ•ด ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์žฅ๋‹จ์  ์ •๋ฆฌโ—

๐Ÿ”ธ๋‹จ์ ๐Ÿ”ธ

  1. ํฌ์ธํ„ฐ ๋•Œ๋ฌธ์— ๊ฐ ๋…ธ๋“œ๋งˆ๋‹ค 4 byte์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•จ

  2. ์ตœ์•ฝ์˜ ๊ฒฝ์šฐ nํšŒ์˜ ๋…ธ๋“œ ํƒ์ƒ‰ ๋ฃจํ”„ -> ๋น„์šฉ์ด ํฌ๊ณ  ์†๋„๊ฐ€ ๋Š๋ฆผ

๐Ÿ”ธ์žฅ์ ๐Ÿ”ธ

  1. ์ƒˆ๋กœ์šด ๋…ธ๋“œ์˜ ์ถ”๊ฐ€,์‚ฝ์ž…,์‚ญ์ œ๊ฐ€ ์‰ฝ๊ณ  ๋น ๋ฆ„

 

๋”ฐ๋ผ์„œ, ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ์ถ”๊ฐ€,์‚ฝ์ž…,์‚ญ์ œ๊ฐ€ ์žฆ๊ณ  ์กฐํšŒ๋Š” ๋“œ๋ฌธ ๊ณณ์— ์œ ์šฉํ•˜๋‹ค.

 

๐Ÿ”น02. ๋”๋ธ” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ

๋”๋ธ” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ํƒ์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

์ด์ „ ๋…ธ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํฌ์ธํ„ฐ๋ฅผ ํ•˜๋‚˜ ๋” Node ์•ˆ์— ๋งŒ๋“ค์–ด์„œ ์–‘๋ฐฉํ–ฅ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

๐Ÿ”น03. ํ™˜ํ˜• ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ

ํ™˜ํ˜• ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ํ—ค๋“œ์™€ ํ…Œ์ผ์„ ์—ฐ๊ฒฐํ•œ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์ด๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ผ์— ์ ‘๊ทผํ•˜๋Š” ๋น„์šฉ์ด ์ž‘์•„์ ธ์„œ, ๋’ค์—์„œ๋ถ€ํ„ฐ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ๋‚˜๊ฐ€๋Š” ํƒ์ƒ‰์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด 10๊ฐœ์˜ ๋…ธ๋“œ ์ค‘ 8๋ฒˆ์งธ๋ฅผ ์ฐพ๊ณ  ์‹ถ๋‹ค๋ฉด HEAD์—์„œ TAIL๋กœ 2๋ฒˆ ํƒ์ƒ‰ํ•˜๋ฉด ๋” ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ”…์•Œ์•„๋‘๋ฉด ์ข‹์€ TIP๐Ÿ”…

์œ ์—ฐํ•˜๊ฒŒ ํฌ๊ธฐ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๋ณด๊ณ  '๋ฆฌ์ŠคํŠธ(list)'๋ผ๊ณ  ํ•˜๋Š”๋ฐ,

C++ STL vector๋„ ๋ฆฌ์ŠคํŠธ์˜ ์ผ์ข…์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

์—ฌ๊ธฐ์„œ C++ STL vector ๋Š” ๋™์  ๋ฐฐ์—ด์˜ ํ˜•ํƒœ์ด๊ณ ,

C++ STL list๋Š” ๋”๋ธ” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•

'์•Œ๊ณ ๋ฆฌ์ฆ˜ > ์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

3. ํ  (0) 2023.09.12
2. ์Šคํƒ  (0) 2023.09.07
728x90

๋ฌธ์ œ

1์€ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ, 0์€ ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ์นธ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

(1,1)์—์„œ ์ถœ๋ฐœํ•˜์—ฌ (N,M)์˜ ์œ„์น˜๋กœ ์ด๋™ํ•  ๋•Œ ์ง€๋‚˜์•ผ ํ•˜๋Š” ์ตœ์†Œ ์นธ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ 1

4 6
101111
101010
101011
111011

์ถœ๋ ฅ 1

15

์ฝ”๋“œ

#include<iostream>
#include<queue>
#include<algorithm>
#define MAX 101

using namespace std;

int MAP[MAX][MAX];
int visited[MAX][MAX];
int dist[MAX][MAX];
int arrow[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };
int N, M;
pair<int, int> startP, endP;

queue < pair<int, int>> Q;

void BFS() {
    
    Q.push(make_pair(startP.first, startP.second));

    dist[startP.first][startP.second]++;
    visited[startP.first][startP.second] = 1;

    while (!Q.empty()) {
        int y = Q.front().first;
        int x = Q.front().second;
        Q.pop();
        //์ขŒ์šฐ์œ„์•„๋ž˜ ํƒ์ƒ‰
        for (int i = 0; i < 4; i++) {
            int ny = y + arrow[i][0];
            int nx = x + arrow[i][1];


            if ((nx >= 0 &&nx < M) && (ny >= 0 && ny < N)
                && MAP[ny][nx] == 1 &&!visited[ny][nx]) {
                visited[ny][nx] = 1;
                Q.push(make_pair(ny, nx));
                dist[ny][nx] = dist[y][x] + 1;
            }
        }
    }
    cout << dist[endP.first-1][endP.second-1];
}


void input() {
    string num;
    for (int i = 0; i < N; i++) {
        cin >> num;
        for (int j = 0; j < M; j++) {
            MAP[i][j] = num[j]-'0';
        }
    }
}

int main() {

    cin.tie(NULL); cout.tie(NULL); ios::sync_with_stdio(false);

    int tmp;
    cin >> N>>M;
    startP = make_pair(0, 0);
    endP = make_pair(N, M);
    
    input();
    BFS();

    return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

์ € input ํ•จ์ˆ˜์—์„œ cin์„ ํ†ตํ•ด MAP์„ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.

์ฃผ์˜ํ•  ์ ์€ ํ•œ ์ค„๋‹น ๋ถ™์–ด์žˆ๋Š” ์ƒํƒœ๋กœ ๋ฐ›์•„์™€์„œ cin์œผ๋กœ ๋ฐ›์€ ๋‹ค์Œ ๋Š์–ด์„œ ์ €์žฅํ•ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

void input() {
    string num;
    for (int i = 0; i < N; i++) {
        cin >> num;
        for (int j = 0; j < M; j++) {
            MAP[i][j] = num[j]-'0';
        }
    }
}

string์œผ๋กœ ๋ฐ›์€ ๋‹ค์Œ string์—์„œ ์ธ์ž๋กœ ์ ‘๊ทผํ•ด์ฃผ๋ฉด char ํ˜•์ด์—ฌ์„œ charํ˜•์„ int๋กœ ๋ฐ”๊พธ๋ ค๋ฉด '0'์˜ ์ˆซ์ž๋ฅผ ๋นผ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋‹ค์Œ BFS ํƒ์ƒ‰์„ ํ†ตํ•ด ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์ฃผ๋ฉด ๋˜๋Š”๋ฐ BOJ 6087๋ฒˆ ๋ ˆ์ด์ € ํ†ต์‹ ๊ณผ ๋ฌธ์ œ๊ฐ€ ๋งค์šฐ ํก์‚ฌํ•ฉ๋‹ˆ๋‹ค.

https://dana3711.tistory.com/90

 

[C++] BOJ 6087๋ฒˆ: ๋ ˆ์ด์ € ํ†ต์‹ 

๋ฌธ์ œ ๊ฑฐ์šธ์„ ์„ค์น˜ํ•˜๋ฉด ๋ฐฉํ–ฅ์„ 90๋„ ํšŒ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. *์€ ๋ฒฝ์œผ๋กœ ๋šซ๊ณ  ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์—†๋‹ค. ๊ฑฐ์šธ์„ ์ตœ์†Œ๋กœ ์„ค์น˜ํ•˜์—ฌ์„œ ์ฒ˜์Œ ์‹œ์ž‘์ง€์  C์—์„œ ๋์ง€์  C์— ๋„๋‹ฌํ• ๋•Œ๊นŒ์ง€ ๊ฐ€์•ผํ•œ๋‹ค. ์ตœ์†Œ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ

dana3711.tistory.com

๋‹ค๋งŒ ๋‹ค๋ฅธ์ ์€ ๋ชฉํ‘œ ์ง€์ ๊นŒ์ง€ ๊ฐ€๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ๋น„์šฉ์„ ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ

if ((nx >= 0 &&nx < M) && (ny >= 0 && ny < N)&& MAP[ny][nx] == 1 &&!visited[ny][nx]) 
{
    visited[ny][nx] = 1;
    Q.push(make_pair(ny, nx));
    dist[ny][nx] = dist[y][x] + 1;
}

4๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ํ• ๋•Œ ๋งŒ์•ฝ ๋งต ์•ˆ์— ์žˆ๊ณ ((nx >= 0 &&nx < M) && (ny >= 0 && ny < N)), ๊ทธ ์นธ์ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์ด๋ผ๋ฉด(MAP[ny][nx] == 1) ํ•ด๋‹น ์นธ์„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์„ ๋•Œ

ํ•ด๋‹น ์นธ์œผ๋กœ ์ž๋ฆฌ๋ฅผ ์ด๋™ํ•˜๊ณ  ๊ฐ€๋Š” ๋น„์šฉ์„ +1 ํ•ด์ค๋‹ˆ๋‹ค.

 

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

 

๋ฐ˜์‘ํ˜•
728x90

๋ฌธ์ œ

๊ฑฐ์šธ์„ ์„ค์น˜ํ•˜๋ฉด ๋ฐฉํ–ฅ์„ 90๋„ ํšŒ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

*์€ ๋ฒฝ์œผ๋กœ ๋šซ๊ณ  ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์—†๋‹ค.

๊ฑฐ์šธ์„ ์ตœ์†Œ๋กœ ์„ค์น˜ํ•˜์—ฌ์„œ ์ฒ˜์Œ ์‹œ์ž‘์ง€์  C์—์„œ ๋์ง€์  C์— ๋„๋‹ฌํ• ๋•Œ๊นŒ์ง€ ๊ฐ€์•ผํ•œ๋‹ค.

์ตœ์†Œ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ์šธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋ผ

 

์ž…๋ ฅ 1

7 8
.......
......C
......*
*****.*
....*..
....*..
.C..*..
.......

์ถœ๋ ฅ 1

3

์ฝ”๋“œ

#include<iostream>
#include<algorithm>
#include<utility>
#include<queue>
#include<vector>

using namespace std;

//6087๋ฒˆ ๋ ˆ์ด์ € ํ†ต์‹ 

char MAP[101][101];
int visited[101][101];
int w, h;
int arrow[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };

pair<int, int> startP, endP;
queue<pair<int,int>> cntDir;
queue < pair<int, int>> Q;
void BFS() {
    for (int i = 0; i < 4; i++) {
        Q.push(make_pair(startP.first, startP.second));
        cntDir.push(make_pair(0, i));
    }
    visited[startP.first][startP.second] = 0;

    while (Q.empty() == 0) {
        int y = Q.front().first;
        int x = Q.front().second;
        int cnt = cntDir.front().first;
        int dir = cntDir.front().second;
        Q.pop();
        cntDir.pop();
        //์ขŒ์šฐ์œ„์•„๋ž˜ ํƒ์ƒ‰
        for (int i = 0; i < 4; i++) {
            int ny = y + arrow[i][0];
            int nx = x + arrow[i][1];
            int nCnt = cnt;

            if (nx <0 || nx >= w || ny < 0 || ny >=h) continue;
            if (MAP[ny][nx] == '*') continue;
            if (dir != i) nCnt++;
            if (visited[ny][nx] >= nCnt) {
                visited[ny][nx] = nCnt;
                Q.push(make_pair(ny, nx));
                cntDir.push(make_pair(nCnt, i));
            }
        }
    }
    cout << visited[endP.first][endP.second];
}

void input() {
    bool isFirst = true;
    for (int i = 0; i < h; i++) {
        for (int j = 0; j < w; j++) {
            cin >> MAP[i][j];
            if (MAP[i][j] == 'C') {
                (isFirst) ? startP = make_pair(i, j) : endP = make_pair(i, j);
                isFirst = false;
            }
            visited[i][j] = 10001;
        }
    }
}

int main() {

    cin.tie(NULL);
    cout.tie(NULL);
    ios::sync_with_stdio(false);

    cin >> w >> h;
    
    input();
    BFS();


    return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

void input() {
    bool isFirst = true;
    for (int i = 0; i < h; i++) {
        for (int j = 0; j < w; j++) {
            cin >> MAP[i][j];
            if (MAP[i][j] == 'C') {
                (isFirst) ? startP = make_pair(i, j) : endP = make_pair(i, j);
                isFirst = false;
            }
            visited[i][j] = 10001;
        }
    }
}

๋จผ์ € input ํ•จ์ˆ˜์—์„œ cin์„ ํ†ตํ•ด MAP์„ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค.

๊ทธ ์ค‘ ๋งŒ์•ฝ C๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ๋‹ค๋ฉด ์ฒ˜์Œ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•ด์„œ ์ฒ˜์Œ์ด๋ผ๋ฉด startP์— ํ•ด๋‹น ์œ„์น˜๋ฅผ ๋„ฃ๊ณ , ์ฒ˜์Œ์ด ์•„๋‹ˆ๋ผ๋ฉด endP์— ํ•ด๋‹น ์œ„์น˜๋ฅผ ๋„ฃ๋Š”๋‹ค.

void BFS() {
    for (int i = 0; i < 4; i++) {
        Q.push(make_pair(startP.first, startP.second));
        cntDir.push(make_pair(0, i));
    }
    visited[startP.first][startP.second] = 0;

    while (Q.empty() == 0) {
        int y = Q.front().first;
        int x = Q.front().second;
        int cnt = cntDir.front().first;
        int dir = cntDir.front().second;
        Q.pop();
        cntDir.pop();
        //์ขŒ์šฐ์œ„์•„๋ž˜ ํƒ์ƒ‰
        for (int i = 0; i < 4; i++) {
            int ny = y + arrow[i][0];
            int nx = x + arrow[i][1];
            int nCnt = cnt;

            if (nx <0 || nx >= w || ny < 0 || ny >=h) continue;
            if (MAP[ny][nx] == '*') continue;
            if (dir != i) nCnt++;
            if (visited[ny][nx] >= nCnt) {
                visited[ny][nx] = nCnt;
                Q.push(make_pair(ny, nx));
                cntDir.push(make_pair(nCnt, i));
            }
        }
    }
    cout << visited[endP.first][endP.second];
}

ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์œ„์น˜์ธ startP์˜ ์œ„์น˜๋ฅผ 4๋ฒˆ Q์— ์˜ฎ๊ฒจ๋‹ด์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘ ์œ„์น˜์—์„œ ์œ„,์•„๋ž˜,์™ผ์ชฝ,์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์„ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉํ–ฅ์„ ์ €์žฅํ•ด์ค๋‹ˆ๋‹ค. ๋ฐฉํ–ฅ์ด ๋‹ค๋ฅด๋‹ค๋ฉด ๊ฑฐ์šธ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋”ํ•ด์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

๊ทธ ๋‹ค์Œ Q๊ฐ€ ๋นŒ๋•Œ๊นŒ์ง€ while๋ฌธ์„ ๋Œ๋ฆฝ๋‹ˆ๋‹ค. Q์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋ณ€์ˆ˜์— ๋‹ด๊ณ  ์ขŒ์šฐ์œ„์•„๋ž˜ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํƒ์ƒ‰์—์„œ *์ธ ๋ฒฝ์„ ๋งŒ๋‚˜๊ฑฐ๋‚˜ ๋งต์„ ๋ฒ—์–ด๋‚˜๋ฉด ํƒ์ƒ‰์„ ๊ฑด๋„ˆ๋›ฐ๊ณ , ๋งŒ์•ฝ ๊ฐ€๋˜ ๋ฐฉํ–ฅ๊ณผ ํ˜„์žฌ ๋ฐฉํ–ฅ์ด ๋งž์ง€ ์•Š๋‹ค๋ฉด ๊ฑฐ์šธ์„ ๋”ํ•ด์ค๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฐฉ๋ฌธํ•œ ์œ„์น˜์—์„œ์˜ ๊ฑฐ์šธ์„ ์‚ฌ์šฉํ•œ ๊ฐฏ์ˆ˜๋ฅผ visited[][] ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ธฐ์— ๋งŒ์•ฝ ์‚ฌ์šฉํ•œ ๊ฐฏ์ˆ˜๊ฐ€ ํ˜„์žฌ ์นด์šดํŠธ๋ณด๋‹ค ๋†’๋‹ค๋ฉด ์ตœ์†Œ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ธฐ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝํ•ด์ค๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋์ง€์ ์— ๋„๋‹ฌํ• ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋ฐ˜๋ณตํ•˜์—ฌ์„œ visited[๋์ง€์ .y][๋์ง€์ .x] ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋‹ต์ด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

 

๋ฐ˜์‘ํ˜•
728x90

 

๋ฌธ์ œ

์ฒซ์งธ ์ค„์— n์ด ์ฃผ์–ด์ง„๋‹ค. n์€ 1,000,000,000,000,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

 

์ž…๋ ฅ 1

1000

์ถœ๋ ฅ 1

228875

์ฝ”๋“œ

#include<iostream>
#include<cmath>

using namespace std;

//2749๋ฒˆ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 3
//ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ๋ฅผ ์ด์šฉ

long long arr[1500050];     //๋ฉ”๋ชจ์ด์ œ์ด์…˜
int m = 1000000;            //๋‚˜๋ˆ„๋Š” ์ˆ˜
int cycle;

int cycle_func() {
    int k=0,tmp=m;
    while (tmp > 1) {
        tmp /= 10;
        k++;
    }

    return 15 * pow(10, k - 1);
}

void pisano_fibo() {
    arr[0] = 0;
    arr[1] = 1;
    //ํŒŒ์‚ฌ๋…ธ ์ฃผ๊ธฐ์— ์˜ํ•˜์—ฌ 1500000์˜ ๊ฐ’๋“ค์ด ๋ฐ˜๋ณต๋œ ํ›„์— ๋‹ค์‹œ ์žฌ ๋ฐ˜๋ณต๋จ
    cycle = cycle_func();
    for (int i = 0; i < cycle; i++) {
        arr[i + 2] = (arr[i+1]+arr[i])%m;
    }
}

int main() {

    cin.tie(NULL);cout.tie(NULL);
    ios::sync_with_stdio(false);

    long long n;
    cin >> n;
    pisano_fibo();
    cout << arr[n % cycle];

    return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๋ฌธ์ œ์ด๋‹ค ๊ธฐ๋ณธ์ ์œผ๋กœ n์˜ ๋ฒ”์œ„๊ฐ€ 1,000,000,000,000,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์— ์“ฐ๋˜ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ์„œ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์€ ์‹œ๊ฐ„์ด ๋งค์šฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฏ€๋กœ ์“ธ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ๋ฅผ ํ†ตํ•ด ๋ฐ˜๋ณต ์ฃผ๊ธฐ๋ฅผ ์ฐพ๊ณ  ๊ทธ ์ฃผ๊ธฐ๋™์•ˆ์˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์—์„œ m์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๊ฐ’๋“ค์„ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค. ๊ทธ ํ›„ ์ €์žฅํ•œ ๋ฐฐ์—ด์—์„œ ์ฐพ๊ณ ์ž ํ•˜๋Š” n๋ฒˆ์งธ๊ฐ€ ์ฃผ๊ธฐ์—์„œ ๋ช‡๋ฒˆ์งธ ์ˆซ์ž์ธ์ง€ ์ฐพ์•„๋‚ด์„œ ํ•ด๋‹น ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ํ”ผ์‚ฌ๋…ธ ์ฃผ๊ธฐ๋Š”

๋‚˜๋ˆ„๋Š” ๊ฐ’์„ M์ด๋ผ๊ณ  ์ง€์นญํ–ˆ์„ ๋•Œ,

M=10^k , cycle = 15 x 10^(k-1)

์ด๋‹ค.

 

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

๋ฐ˜์‘ํ˜•
728x90

๋ฌธ์ œ

๋‘ ๋‹ค๊ฐํ˜•์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋‘ ๋‹ค๊ฐํ˜•์˜ ๋ฏผ์ฝ”ํ”„์Šคํ‚ค ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋งŒ์•ฝ ๋ฏผ์ฝ”ํ”„์Šคํ‚ค ํ•ฉ์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹ค๊ฐํ˜•์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด ๋‹ค์Œ์˜ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ํ•˜๋‚˜์˜ ๋‹ค๊ฐํ˜•๋งŒ์„ ๊ตฌํ•˜๋„๋ก ํ•œ๋‹ค. ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ์ด๋‹ค.

 

์ž…๋ ฅ 1

3 3
0 0
1 0
1 1
0 1
0 0
1 0

์ถœ๋ ฅ 1

5
0 0
2 0
2 1
1 2
0 1

์ฝ”๋“œ

#include<iostream>
#include<algorithm>
#include<vector>
#define x first
#define y second
using namespace std;

//2244๋ฒˆ ๋ฏผ์ฝ”ํ”„์Šคํ‚ค ํ•ฉ
//Convex Hull(CCW(Counter Clock Wise)) ์‚ฌ์šฉ

typedef pair<long long, long long> Point2f;
Point2f a[1010];
Point2f b[1010];

//counter clock wise : ์ขŒํšŒ์ „ํ•˜๋Š”์ง€ ํŒ๋‹จ
//๋ฒกํ„ฐ AB์™€ ๋ฒกํ„ฐ AC์˜ CW/CCW
// 0๋ณด๋‹ค ํฌ๋ฉด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋„๋Š” ๊ฒƒ, 0๋ณด๋‹ค ์ž‘์œผ๋ฉด ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋„๋Š” ๊ฒƒ
//int์— 1LL์„ ๊ณฑํ•ด์ฃผ๋ฉด long long์œผ๋กœ ํ˜•๋ณ€ํ™˜์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ
int ccw(Point2f a, Point2f b, Point2f c) {
    long long res = a.x * b.y + b.x * c.y + c.x * a.y;
    res -= b.x * a.y + c.x * b.y + a.x * c.y;
    if (res > 0) return 1;          //์‹œ๊ณ„ ๋ฐ˜๋Œ€๋ฐฉํ–ฅ
    if (res) return -1;             //์‹œ๊ณ„ ๋ฐฉํ–ฅ
    return 0;                           //ํ‰๋ฉด์ƒ
}

long long dist(Point2f a, Point2f b) {
    long long dx = 1LL*a.x - b.x;
    long long dy = 1LL * a.y - b.y;
    return dx * dx + dy * dy;
}

int main() {

    vector<Point2f> arr;
    int aNum, bNum;
    int xTmp, yTmp;
    int pIdx = 0;
    cin >> aNum >> bNum;
    pIdx = aNum * bNum;
    for (int i = 0; i < aNum; i++) {
        cin >> xTmp >> yTmp;
        a[i].x = xTmp; a[i].y = yTmp;
    }
    for (int i = 0; i < bNum; i++) {
        cin >> xTmp >> yTmp;
        b[i].x = xTmp; b[i].y = yTmp;
    }
    //๋ชจ๋“  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์ ๋“ค vector ์ œ์ž‘
    for (int i = 0; i < aNum; i++) {
        for (int j = 0; j < bNum; j++) {
            arr.push_back(Point2f{ a[i].x + b[j].x,a[i].y + b[j].y });
        }
    }

    //arr์˜ ์ตœ์†Œ ๊ฐ’์„ ์ฐพ์•„์„œ 0๋ฒˆ ์ž๋ฆฌ์™€ ๋ฐ”๊ฟˆ(0๋ฒˆ์„ ์ œ์ผ ์ž‘์€ ๊ฐ’์œผ๋กœ ์„ค์ •)
    swap(arr[0], *min_element(arr.begin(), arr.end()));
    //0๋ฒˆ์„ ์ œ์™ธํ•œ ์ ๋“ค์„ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ์ •๋ ฌ
    //[&]{}๋Š” ๋žŒ๋‹ค์‹์œผ๋กœ์จ ํ•ด๋‹น ํ•จ์ˆ˜์—๋”ฐ๋ผ์„œ sort๋ฅผ ํ• ์ง€ ๋ง์ง€ ๊ฒฐ์ •ํ•จ
    sort(arr.begin() + 1, arr.end(), [&](Point2f& a, Point2f& b) {
        int cw = ccw(arr[0], a, b);
        //cw๊ฐ€ 0 ์ด์ƒ์ด๋ฉด ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์ด๊ณ  true๋ฅผ ๋ฐ˜ํ™˜ 0์ด๋ฉด false ๋ฐ˜ํ™˜, cw๊ฐ€ -1์ธ ๊ฒฝ์šฐ(์‹œ๊ณ„ ๋ฐฉํ–ฅ) if๋ฌธ์„ ๋“ค์–ด์˜ค์ง€ ์•Š์Œ
        if (cw) return cw > 0;          
        return dist(arr[0], a) < dist(arr[0], b); //cw๊ฐ€ -1์ธ ๊ฒฝ์šฐ ๊ธฐ์ค€์  arr[0]์—์„œ์˜ ๊ฑฐ๋ฆฌ์ˆœ์œผ๋กœ ์ •๋ ฌ
        });

    vector<Point2f> hull;
    for (int i = 0; i < arr.size();i++) {
        while (hull.size() >= 2 && ccw(hull[hull.size() - 2], hull.back(), arr[i]) <= 0) {
            hull.pop_back();
        }
        hull.push_back(arr[i]);
    }
    cout << hull.size() << "\n";
    for (int i = 0; i < hull.size(); i++) {
        cout << hull[i].x << " " << hull[i].y << "\n";
    }

    return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

convex hull๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

convex hull์€ ์ฃผ์–ด์ง„ ์ ์—์„œ ์™ธ๊ณฝ์„ ์„ ์ด๋ฃจ๋Š” ์ ๋“ค์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ๋ฐ ๋ฏผ์ฝ”ํ”„์Šคํ‚ค์˜ ํ•ฉ ๋˜ํ•œ ๊ณต๊ฐ„์˜ ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— convex hull ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

์ฝ”๋“œ์˜ ํ•ต์‹ฌ์ ์ธ ๋ถ€๋ถ„์€ https://justicehui.github.io/ioi/2019/05/21/BOJ2244/ ์—์„œ ๋”ฐ์™”๋‹ค.

๋ช‡๊ฐ€์ง€ ๋žŒ๋‹ค์‹์ด๋ผ๋˜์ง€ auto์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ๋‚˜์—๊ฒŒ ์–ด๋ ค์›Œ์„œ for๋ฌธ์œผ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์ฃผ์„์„ ๋‹ฌ์•„์„œ ์ง„ํ–‰ํ•ด๋ณด์•˜๋‹ค. ๊ธฐ์กด์˜ ๋‹ค๋ฅธ๊ณณ์—์„œ ์ฐพ์•„์„œ convex hull์„ ๊ตฌํ˜„ํ•ด์„œ ๋„ฃ์–ด๋ณด์•˜๋Š”๋ฐ ์˜ˆ์ œ๋ฅผ ๋„ฃ์–ด๋ณด์•˜์„ ๋•Œ๋Š” ์ถœ๋ ฅ ๊ฒฐ๊ณผ๊ฐ€ ์ž˜๋‚˜์™”์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฑ์ค€์—์„œ ํ…Œ์ŠคํŠธ ํ• ๋•Œ๋งˆ๋‹ค 

์ด๋Ÿฌํ•œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋‚˜ ์ถœ๋ ฅ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์™€์„œ ๋ญ๊ฐ€ ๋ฌธ์ œ์ธ์ง€ ๋ชฐ๋ผ์„œ ๋‹ค๋ฅธ ๋ถ„ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์ฐธ๊ณ ํ•ด์„œ ํ•ด๋ณด์•˜๋Š”๋ฐ ์•„๋งˆ sortingํ•˜๋Š” ๊ณผ์ •์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚œ๊ฒŒ ์•„๋‹๊นŒ ์‹ถ๋‹ค..

convex hull ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ๊ธ€์€ https://kbw1101.tistory.com/50 ์—ฌ๊ธฐ ๋ธ”๋กœ๊ทธ์— ์•„์ฃผ ์นœ์ ˆํ•˜๊ฒŒ ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค.

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

๋ฐ˜์‘ํ˜•
728x90

๋ฌธ์ œ

๋™๊ตด์— ์žˆ๋Š” ๋ฏธ๋„ค๋ž„์˜ ๋ชจ์–‘๊ณผ ๋‘ ์‚ฌ๋žŒ์ด ๋˜์ง„ ๋ง‰๋Œ€์˜ ๋†’์ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋ชจ๋“  ๋ง‰๋Œ€๋ฅผ ๋˜์ง€๊ณ  ๋‚œ ์ดํ›„์— ๋ฏธ๋„ค๋ž„ ๋ชจ์–‘์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ 1

5 6
. . . . . .
. . X X . .
. . X . . .
. X X X X .
1
3

์ถœ๋ ฅ 1

. . . . . .
. . . . . .
. . X X . .
. . X X . .
. X X X X .

์ฝ”๋“œ

#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#define y first
#define x second
using namespace std;

//2933๋ฒˆ ๋ฏธ๋„ค๋ž„

//2์ฐจ์› ๋ฐฐ์—ด ์„ ์–ธ
char arr[101][101];
int visited[101][101];      //dfs๋ฅผ ์œ„ํ•œ ๋ฐฉ๋ฌธ ๋ฐฐ์—ด
int R, C;
vector<pair<int,int>> cluster;
int arrow[4][2] = { {1,0},{-1,0},{0,1},{0,-1} };

void DFS(int yIdx, int xIdx) {
    if (arr[yIdx][xIdx] == '.' || visited[yIdx][xIdx]) return;
    visited[yIdx][xIdx] = true;
    cluster.push_back({yIdx,xIdx});
    //์ขŒ์šฐ์œ„์•„๋ž˜ ํƒ์ƒ‰
    for (int i = 0; i < 4; i++) {
        int ny = yIdx + arrow[i][0];
        int nx = xIdx + arrow[i][1];    
        if (nx >= 0 && nx < C && ny >= 0 && ny < R)
            DFS(ny, nx);
    }
}

void checkCluster() {
    memset(visited, 0, sizeof(visited));
    for (int a = 0; a < R; a++) {
        for (int b = 0; b < C; b++) {
            if (arr[a][b] == '.' || visited[a][b]) continue;
            cluster.clear();
            DFS(a,b);
            vector<int> low(C, -1);     //vector(์ปจํ…Œ์ด๋„ˆ ํฌ๊ธฐ, ๊ฐ๊ฐ ํ• ๋‹น๋  ๊ฐ’)
            for (int z = 0; z < cluster.size(); z++) {
                pair<int, int> p= cluster[z];
                low[p.x] = max(low[p.x], p.y);
                arr[p.y][p.x] = '.';
            }

            //์–ผ๋งˆ๋‚˜ ๋ฐ‘์œผ๋กœ ์˜ฎ๊ธธ์ง€ i์— ๋„ฃ๊ธฐ
            int lowmove = R;
            for (int i, j = 0; j < C; j++) {
                if (low[j] == -1) continue;
                i = low[j];

                //'.'์ด ์•„๋‹Œ๊ฒฝ์šฐ, ํƒ์ƒ‰ ๋†’์ด๊ฐ€ ๋†’์ด๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ
                while (i < R &&arr[i][j] == '.') {
                    i++;
                }
                lowmove = min(lowmove, i - low[j] - 1);
            }

            for (int i = 0; i < cluster.size(); i++) {
                pair<int, int> p = cluster[i];
                p.y += lowmove;
                arr[p.y][p.x] = 'x';
                visited[p.y][p.x] = true;
            }
        }
    }
    
}

void shoot(int orderNum,int height) {
    //์™ผ์ชฝ์ธ์ง€ ์˜ค๋ฅธ์ชฝ์ธ์ง€ ํŒ๋‹จ
    height = R - height;
    if (orderNum % 2 == 0) {
        for (int i = 0; i < C; i++) {
            if (arr[height][i] == 'x') {
                arr[height][i] = '.';
                break;
            }
        }
    }
    else {
        for (int i = C-1; i >= 0; i--) {
            if (arr[height][i] == 'x') {
                arr[height][i] = '.';
                break;
            }
        }
    }
    
    checkCluster();
}

int main() {
    
    cin.tie(NULL);
    cout.tie(NULL);
    ios::sync_with_stdio(false);


    cin >> R >> C;

    for (int i = 0; i < R; i++) {
        for (int j = 0; j < C; j++) {
            cin >> arr[i][j];
        }
    }
    int N,height=0;
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> height;
        shoot(i, height);
    }

    for (int i = 0; i < R; i++) {
        for (int j = 0; j < C; j++) {
            cout << arr[i][j];
        }
        cout << "\n";
    }

    return 0;
}

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

checkCluster() ํ•จ์ˆ˜ ๋ถ€๋ถ„์€ https://100100e.tistory.com/152 ์ด ๋ธ”๋กœ๊ทธ ๋ถ„์˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์—ฌ์„œ ์ œ์ž‘ํ•˜์˜€๋‹ค. ์ œ์ผ ๋‚˜๋ž‘ ์ƒ๊ฐ์ด ๋น„์Šทํ•˜๊ธฐ๋„ ํ–ˆ๊ณ  ์•Œ๊ธฐ ์‰ฝ๊ฒŒ ์ž‘์„ฑ๋˜์–ด์žˆ์–ด์„œ ์ข‹์•˜๋‹ค. checkCluster() ๋ถ€๋ถ„์„ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ด๋ณผ๊นŒ ์‹ถ๋‹ค.

 memset(visited, 0, sizeof(visited));
    for (int a = 0; a < R; a++) {
        for (int b = 0; b < C; b++) {

 

checkCluster๋Š” ๋ถ€๋ฉ”๋ž‘์„ ๋˜์ง„ ํ›„์— ๋–จ์–ด์ง€๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋“ค์„ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜๋กœ์จ ์‹คํ–‰๋œ๋‹ค. ๋”ฐ๋ผ์„œ DFS๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด visited ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ค˜์•ผํ•œ๋‹ค. ๊ทธ๋ฅผ ์œ„ํ•ด memset ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์˜€๋‹ค. ๋‚˜๋จธ์ง€ for๋ฌธ์€ R x C ํฌ๊ธฐ์˜ ๋งต์„ for๋ฌธ์„ ํ†ตํ•ด ๋Œ๋ฆฐ๋‹ค.

if (arr[a][b] == '.' || visited[a][b]) continue;
cluster.clear();
DFS(a,b);

๊ทธ ๋‹ค์Œ์—๋Š” ํ•ด๋‹น ๋งต์˜ ์นธ์ด . ์œผ๋กœ ๋น„์–ด์žˆ๋Š” ์นธ์ด๊ฑฐ๋‚˜ ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ ๋ฐฐ์—ด์ผ ๊ฒฝ์šฐ ๊ทธ๋Œ€๋กœ ๋ฐ‘์˜ ๊ณ„์‚ฐ์„ ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ„๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ DFS ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ขŒ์šฐ์œ„์•„๋ž˜๋ฅผ ํƒ์ƒ‰ํ•ด์„œ cluster ๋ฒกํ„ฐ์— ๋„ฃ๋Š”๋‹ค.

vector<int> low(C, -1);     //vector(์ปจํ…Œ์ด๋„ˆ ํฌ๊ธฐ, ๊ฐ๊ฐ ํ• ๋‹น๋  ๊ฐ’)
for (int z = 0; z < cluster.size(); z++) {
    pair<int, int> p= cluster[z];
    low[p.x] = max(low[p.x], p.y);
    arr[p.y][p.x] = '.';
}

๊ทธ ํ›„์—  low ๋ผ๋Š” ๋•…์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฒกํ„ฐ ๋ฐฐ์—ด์„ ์„ ์–ธํ•œ๋‹ค. low(C,-1) ์ด๋ ‡๊ฒŒ ์„ ์–ธํ•˜๋ฉด C ํฌ๊ธฐ ๋งŒํผ์„ -1์˜ ๊ฐ’์œผ๋กœ ํ• ๋‹นํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค. ๊ทธ ๋‹ค์Œ for๋ฌธ์„ ํ†ตํ•ด์„œ ์ €์žฅ๋œ cluster๋งŒํผ ๋Œ๋ ค์ฃผ๊ณ  ๋งŒ์•ฝ ํ•ด๋‹น ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋†’์ด ๊ฐ’์ธ p.y ๊ฐ’์ด ๋งŒ์•ฝ์— ๊ธฐ์กด์— ์ €์žฅ๋œ ๋†’์ด ๊ฐ’์ธ low[p.x]์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ํฐ ๊ฐ’์„ low[p.x]์— ์ €์žฅํ•ด์ค€๋‹ค. ์ €์žฅํ•œ ๋‹ค์Œ์—๋Š” ํ•ด๋‹น ๊ฐ’์€ ๋‚˜์ค‘์— ๋‹ค์‹œ ๋–จ์–ด์ง„ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค„ ๊ฒƒ์ž„์œผ๋กœ ๋ฏธ๋ฆฌ .์œผ๋กœ ๋ณ€๊ฒฝ ์‹œ์ผœ์ค€๋‹ค.

int lowmove = R;
for (int i, j = 0; j < C; j++) {
    if (low[j] == -1) continue;
    i = low[j];

    //'.'์ด ์•„๋‹Œ๊ฒฝ์šฐ, ํƒ์ƒ‰ ๋†’์ด๊ฐ€ ๋†’์ด๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ
    while (i < R &&arr[i][j] == '.') {
        i++;
    }
    lowmove = min(lowmove, i - low[j] - 1);
}

์–ผ๋งŒํผ ๋ฐ‘์œผ๋กœ ์˜ฎ๊ธธ์ง€ ๊ณ„์‚ฐํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. lowmove ๋ณ€์ˆ˜์—๋Š” ๊ฐ€์žฅ ๋งŽ์ด ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’ ๋†’์ด R๊ฐ’์„ ๋„ฃ์€ ๋‹ค์Œ ๋น„๊ตํ•ด๊ฐ€๋ฉด์„œ ์ž‘์œผ๋ฉด ๋ณ€๊ฒฝํ•˜๋Š” ํ˜•์‹์ด๋‹ค. if(low[j]==-1) continue; ์˜ ๊ฒฝ์šฐ ๋•…์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์—ฐ์‚ฐ์„ ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ„๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ i = low[j];๋กœ ๋•…์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋†’์ด๋ฅผ ๋„ฃ๋Š”๋‹ค. ๊ทธ ํ›„ while๋ฌธ์„ ํ†ตํ•ด์„œ ๋งŒ์•ฝ ํ•ด๋‹น ์ขŒํ‘œ์˜ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋นˆ๊ณต๊ฐ„์ธ ๊ฒฝ์šฐ ๋‚ด๋ ค๊ฐ€์•ผํ•  ์นธ์˜ ๊ฐ’์ธ i๋ฅผ ++ํ•ด์ค€๋‹ค. ํ•ด๋‹น while๋ฌธ์ด ๊ธ‘๋‚˜๊ณ  ๋‚˜๋ฉด min ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ธฐ์กด์˜ lowmove ๊ฐ’๊ณผ i-low[j]-1์„ ๋น„๊ตํ•œ๋‹ค. arr[i][j]์˜ ๊ฒฝ์šฐ ์•„๊นŒ ์œ„์—์„œ .์œผ๋กœ ๋งŒ๋“ค์–ด๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๊ฐœ๊ฐ€ ๋” ์„ธ์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๋‚ด๋ ค๊ฐ€์•ผํ•  ์นธ์˜ ์ˆ˜ i ์—์„œ -1์„ ํ•œ ๋‹ค์Œ ๊ธฐ์กด ๋†’์ด์ธ low[j]๋ฅผ ๋นผ์ฃผ๋ฉด ๋‚ด๋ ค๊ฐ€์•ผํ•  ์นธ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.

for (int i = 0; i < cluster.size(); i++) {
                pair<int, int> p = cluster[i];
                p.y += lowmove;
                arr[p.y][p.x] = 'x';
                visited[p.y][p.x] = true;
}

๋งˆ์ง€๋ง‰์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐฏ์ˆ˜ ๋งŒํผ for๋ฌธ์„ ๋Œ๋ ค์„œ lowmove ๋งŒํผ ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์˜ฎ๊ฒจ์ค€๋‹ค.

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

๋ฐ˜์‘ํ˜•
728x90

๋ฌธ์ œ

๋ฐฑ์ค€์ด๋Š” ๋™์ƒ์—๊ฒŒ "๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”" ๊ฒŒ์ž„์„ ๊ฐ€๋ฅด์ณ์ฃผ๊ณ  ์žˆ๋‹ค. ๋ฐฑ์ค€์ด๊ฐ€ ์ •์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ์™ธ์น ๋•Œ๋งˆ๋‹ค ๋™์ƒ์€ ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฑ์ค€์ด๊ฐ€ ๋งํ•œ ์ˆ˜ ์ค‘์—์„œ ์ค‘๊ฐ„๊ฐ’์„ ๋งํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ, ๊ทธ๋™์•ˆ ๋ฐฑ์ค€์ด๊ฐ€ ์™ธ์นœ ์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ง์ˆ˜๊ฐœ๋ผ๋ฉด ์ค‘๊ฐ„์— ์žˆ๋Š” ๋‘ ์ˆ˜ ์ค‘์—์„œ ์ž‘์€ ์ˆ˜๋ฅผ ๋งํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฑ์ค€์ด๊ฐ€ ๋™์ƒ์—๊ฒŒ 1, 5, 2, 10, -99, 7, 5๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์™ธ์ณค๋‹ค๊ณ  ํ•˜๋ฉด, ๋™์ƒ์€ 1, 1, 2, 2, 2, 2, 5๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๋งํ•ด์•ผ ํ•œ๋‹ค. ๋ฐฑ์ค€์ด๊ฐ€ ์™ธ์น˜๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋™์ƒ์ด ๋งํ•ด์•ผ ํ•˜๋Š” ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ 1

7
1
5
2
10
-99
7
5

์ถœ๋ ฅ 1

1
1
2
2
2
2
5

 

์ฝ”๋“œ

#include<iostream>
#include<queue>
#include<vector>

using namespace std;

//1655๋ฒˆ ๊ฐ€์šด๋ฐ๋ฅผ ๋งํ•ด์š”
//์ตœ์†Œํž™, ์ตœ๋Œ€ํž™ ์‚ฌ์šฉ
int main() {
    
    cin.tie(NULL);
    cout.tie(NULL);

    int N,temp;
    priority_queue<int> max;        //์ตœ๋Œ€ํž™       ์šฐ์„ ์ˆœ์œ„ ํ๋Š” default๋กœ less<in>๋ฅผ ์‚ฌ์šฉ
    priority_queue<int,vector<int>,greater<int>> min;       //์ตœ์†Œํž™
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> temp;

        (max.size() == min.size()) ? max.push(temp) : min.push(temp);

        if (!max.empty() && !min.empty()&& max.top() > min.top()) {
            //์ค‘๊ฐ„ ๊ฐ’์˜ ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๋ฉด ๊ฐ’ ๋ฐ”๊พธ๊ธฐ
            int maxVal, minVal;
            maxVal = max.top();
            minVal = min.top();
            max.pop();
            min.pop();
            max.push(minVal);
            min.push(maxVal);
        }

        cout << max.top()<<"\n";
    }
    
    return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

์—ฌ๋Ÿฌ๊ฐ€์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘์—์„œ ๋ฌด์—‡์„ ์™œ ์“ฐ๋Š”์ง€๊ฐ€ ํ•ต์‹ฌ์ธ๋ฐ ์—ฌ๊ธฐ์„œ๋Š” ์ตœ์†Œํž™, ์ตœ๋Œ€ํž™์„ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ ์ด์œ ๋Š” ํž™์€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ’ ์ค‘ ์ตœ๋Œ“๊ฐ’ ๋˜๋Š” ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์—ฐ์‚ฐ์ด ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋น ๋ฅธ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํž™์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ์ด๋ฏ€๋กœ ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

์ตœ๋Œ€ ํž™์€ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก ์ €์žฅ๋œ ๊ฐ’์ด ์ปค์ง€๋Š” ๊ตฌ์กฐ์ด๋‹ค. 

์ตœ์†Œ ํž™์€ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก ๊ฐ’์ด ์ž‘์•„์ง€๋Š” ๊ตฌ์กฐ์ด๋‹ค.

 

์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด์„ ๋ฐ˜ํ‹ˆ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ํ•œ์ชฝ์€ ์ตœ์†Œ ํž™, ํ•œ์ชฝ์€ ์ตœ๋Œ€ ํž™์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์—ฐ์‚ฐํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด ๊ฒฝ์šฐ priority_queue๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. priority_queue๋Š” ํž™์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ณ  ์˜ต์…˜์„ ์ด์šฉํ•˜์—ฌ greater<int> ๋ฐ less<int>๋ฅผ ์ด์šฉํ•˜์—ฌ ์œ„์™€๊ฐ™์€ ์ตœ์†Œํž™, ์ตœ๋Œ€ํž™ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ํ†ตํ•ด์„œ ์ค‘๊ฐ„๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ด๋ผ ๋ฐ˜ํ‹ˆ์„ ๋‚˜๋ˆ„์–ด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๋Š” ์ตœ์†Œํž™, ์ตœ๋Œ€ํž™์„ ์ด์šฉํ•˜๋ฉด ๋น ๋ฅด๊ฒŒ ํ†ต๊ณผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

๋ฐ˜์‘ํ˜•
728x90

๋ฌธ์ œ

  1. ๋จผ์ € ๋ฑ€์€ ๋ชธ๊ธธ์ด๋ฅผ ๋Š˜๋ ค ๋จธ๋ฆฌ๋ฅผ ๋‹ค์Œ์นธ์— ์œ„์น˜์‹œํ‚จ๋‹ค.
  2. ๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ ์นธ์— ์žˆ๋˜ ์‚ฌ๊ณผ๊ฐ€ ์—†์–ด์ง€๊ณ  ๊ผฌ๋ฆฌ๋Š” ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค.
  3. ๋งŒ์•ฝ ์ด๋™ํ•œ ์นธ์— ์‚ฌ๊ณผ๊ฐ€ ์—†๋‹ค๋ฉด, ๋ชธ๊ธธ์ด๋ฅผ ์ค„์—ฌ์„œ ๊ผฌ๋ฆฌ๊ฐ€ ์œ„์น˜ํ•œ ์นธ์„ ๋น„์›Œ์ค€๋‹ค. ์ฆ‰, ๋ชธ๊ธธ์ด๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์‚ฌ๊ณผ์˜ ์œ„์น˜์™€ ๋ฑ€์˜ ์ด๋™๊ฒฝ๋กœ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ด ๊ฒŒ์ž„์ด ๋ช‡ ์ดˆ์— ๋๋‚˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜๋ผ.

 

*์ฒ˜์Œ ๋ดค์„๋•Œ ํ„ด์— ๊ด€ํ•œ ๊ฐœ๋…์ด ์ž˜ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜๋Š”๋ฐ ํ„ด์€ ๋ฌด์กฐ๊ฑด ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ์‹œ์Šคํ…œ์ด๋‹ค.

 

 

์ž…๋ ฅ 1

6
3
3 4
2 5
5 3
3
3 D
15 L
17 D

์ถœ๋ ฅ 1

9

 

์ž…๋ ฅ 2

10
4
1 2
1 3
1 4
1 5
4
8 D
10 D
11 D
13 L

์ถœ๋ ฅ 2

21

 

์ž…๋ ฅ 3

10
5
1 5
1 3
1 2
1 6
1 7
4
8 D
10 D
11 D
13 L

์ถœ๋ ฅ 3

13

 

 

์ฝ”๋“œ

#include<iostream>
//#include<Windows.h>
#include<deque>
#include<vector>

using namespace std;

int main() {
    
    int N, K,L;     //N : ๋ณด๋“œ์˜ ํฌ๊ธฐ, K : ๋‹ค์Œ ์ค„์— ์‚ฌ๊ณผ์˜ ๊ฐœ์ˆ˜, L : ๋ฑ€์˜ ๋ฐฉํ–ฅ ๋ณ€ํ™˜ ํšŸ์ˆ˜
    int column, row;
    int currentX=0, currentY=0;
    int arrIdx = 0, turnIdx=0;          //arrIdx : ๋ฐฉํ–ฅ๋ฐฐ์—ด ์ธ๋ฑ์Šค, turnIdx : ๋ฐฉํ–ฅ ํšŒ์ „๋ฐฐ์—ด ์ธ๋ฑ์Šค
    int arrow[4][2] = { {1,0},              //์˜ค๋ฅธ์ชฝ
                        {0,1},              //์•„๋ž˜
                        {-1,0},             //์™ผ์ชฝ
                        {0,-1} };           //์œ„
    deque<vector<int>> body;

    cin >> N;

    //ํ•ด๋‹น ๋ฐฐ์—ด๋งŒํผ 2์ฐจ์› ํ–‰๋ ฌ ๋งŒ๋“ค๊ธฐ
    int** board = new int* [N];
    for (int i = 0; i < N; i++) {
        board[i] = new int[N];
    }
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            board[i][j] = 0;
        }
    }

    board[0][0] = 1;
    vector<int> point;
    point.push_back(0);
    point.push_back(0);
    body.push_back(point);

    cin >> K;
    for (int i = 0; i < K; i++) {
        cin >> row >> column;
        board[row-1][column-1] = 2;
    }
    cin >> L;
    int* turn = new int[L];
    int* direction = new int[L];
    int lValue;
    char rValue;

    for (int i = 0; i < L; i++) {
        cin >> lValue >> rValue;
        turn[i] = lValue;
        direction[i] = rValue;
    }

    int time = 0;

    while (time < 10000) {
    
        /* {
            Sleep(1000);
            system("cls");

            cout << "Time :" << time+1 << endl;
            //์ถœ๋ ฅํ•ด์„œ ํ™•์ธํ•˜๊ธฐ
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    cout << board[i][j] << " ";
                }
                printf("\n");
            }
        }*/
        
        if (time == turn[turnIdx] && time != 0) {
            if (direction[turnIdx] == 'D') {
                arrIdx++;
            }
            if (direction[turnIdx] == 'L') {
                arrIdx--;
            }
            turnIdx++;
        }


        if (arrIdx > 3)
            arrIdx = arrIdx % 4;
        if (arrIdx < 0) {
            arrIdx = 4 + arrIdx;
        }

        //์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ
        currentX += arrow[arrIdx][0];
        currentY += arrow[arrIdx][1];
       
        if ((currentX < 0 || currentX >= N) ||(currentY < 0 || currentY >= N))
            break;
        if (board[currentY][currentX] == 1)
            break;

        if (board[currentY][currentX] == 2) {
            //๋งŒ์•ฝ ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด
            point.clear();
            point.push_back(currentY);
            point.push_back(currentX);
            body.push_front(point);

            for (size_t i = 0; i < body.size(); i++) {
                board[body[i][0]][body[i][1]] = 1;
            }
        }
        else {
            //๋งจ๋์˜ ๊ฐ’์˜ ์ž๋ฆฌ๋ฅผ 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ
            board[body.back()[0]][body.back()[1]] = 0;
            //์ฒ˜์Œ์˜ ๊ฐ’์„ ๋’ค๋กœ ๋ฐ€์–ด์ฃผ๊ธฐ

            for (size_t  i = body.size() - 1; i >0 ; i--) {
                int temp = body[i-1][0];
                body[i][0] = temp;
                temp = body[i-1][1];
                body[i][1] = temp;
            }

            //์ฒซ๋ฒˆ์งธ ๋จธ๋ฆฌ์›€์ง์ด๊ธฐ
            body[0][0]= currentY;
            body[0][1]= currentX;

            for (size_t i = 0; i < body.size(); i++) {
                board[body[i][0]][body[i][1]] = 1;
            }
        }

        time++;
    }

    cout << time + 1;

    //ํ• ๋‹น ํ•ด์ œ
    for (int i = 0; i < N; i++)
        delete[] board[i];

    return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

ํ„ด์— ๊ด€ํ•œ ๊ฐœ๋…์ด ์ฒ˜์Œ์— ์žกํžˆ์ง€ ์•Š์•„์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์ค„ ์•Œ๊ณ  ์‹œ๊ฐ„์„ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ๋‹ค.

    Sleep(1000);
    system("cls");

    cout << "Time :" << time+1 << endl;
    //์ถœ๋ ฅํ•ด์„œ ํ™•์ธํ•˜๊ธฐ
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            cout << board[i][j] << " ";
        }
        printf("\n");
    }

์ด๋ถ€๋ถ„์˜ ์ฃผ์„์ฒ˜๋ฆฌ๋ฅผ ๋นผ๋ฉด ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ์˜ 3๊ฐœ์˜ ์ถœ๋ ฅ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

0์ด ๋นˆ์นธ์ด๊ณ  1์€ ๋ฑ€, 2๋Š” ์‚ฌ๊ณผ์ด๋‹ค.

 

์˜ˆ์ œ 1
์˜ˆ์ œ 2
์˜ˆ์ œ 3

์‚ฌ์‹ค ์—ฌ๊ธฐ๊นŒ์ง€ ์™€์„œ ์˜ˆ์ œ๋ฅผ ๋„ฃ์–ด๋ณด์•˜์„ ๋•Œ ์ œ์ถœ์„ ํ•˜๋‹ˆ๊นŒ ํ‹€๋ฆฐ๊ฒƒ์œผ๋กœ ๋‚˜์™”์—ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ํ•ด๋ณด์ง€ ์•Š์•„์„œ ๊ทธ๋Ÿฐ๋ฐ ๋ฐ˜๋ก€ ์ผ€์ด์Šค๋ฅผ ๋ชจ์•„๋†“์€ ์‚ฌ์ดํŠธ๋ฅผ ์ฐพ์•˜๋‹ค.

https://www.acmicpc.net/board/view/56469

 

๊ธ€ ์ฝ๊ธฐ - ๋ฑ€ ๋ฌธ์ œ ๋ฐ˜๋ก€๋ชจ์Œ์ž…๋‹ˆ๋‹ค

๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

www.acmicpc.net

๋‚˜์˜ ๊ฒฝ์šฐ ๋งจ ์ฒ˜์Œ ๋ฐ˜๋ก€ ์ผ€์ด์Šค์˜ 5๋ฒˆ์งธ๊นŒ์ง€ ํ†ต๊ณผ๋ฅผ ํ•˜๋‹ˆ ํ†ต๊ณผ๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๋‹ค๋ฅธ ๋ถ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐพ์•„๋ณด๋‹ˆ ์ด๋ถ„๊บผ๊ฐ€ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌ๋˜์–ด ์žˆ์—ˆ๋‹ค.

๋‚ด ์ฝ”๋“œ๋Š” for๋ฌธ์„ ๋งŽ์ด ์“ฐ๋Š”๋ฐ for๋ฌธ์„ ๋งŽ์ด ์“ฐ์ง€ ์•Š๋„๋ก ์ƒ๊ฐํ•˜๋Š” ํž˜์„ ์ข€ ๋” ๊ธธ๋Ÿฌ์•ผ๊ฒ ๋‹ค.

https://velog.io/@nacean/%EB%B0%B1%EC%A4%803190-%EB%B1%80-C-%ED%92%80%EC%9D%B4

 

๋ฐฑ์ค€[3190] ๋ฑ€ C++ ํ’€์ด

์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๊ตฌํ˜„ํ•  ์ค„ ์•ˆ๋‹คํ๋ฅผ ์‚ฌ์šฉํ•  ์ค„ ์•ˆ๋‹ค๋ฑ€์˜ ๋ชธํ†ต์˜ ์ฒ˜์Œ๊ณผ ๋์„ ์ €์žฅํ•ด์ฃผ๊ธฐ ์œ„ํ•ด queue๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์‹œ๊ฐ„๋งˆ๋‹ค ๋ฐฐ์—ด์„ ์ฑ„ํฌํ•˜์—ฌ, D ํ˜น์€ L์ผ ๊ฒฝ์šฐ ๋ฐฉํ–ฅ ํšŒ์ „์„ ํ•œ๋‹คwhile๋ฌธ์„

velog.io

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

๋ฐ˜์‘ํ˜•
728x90

๋ฌธ์ œ

1์—์„œ๋ถ€ํ„ฐ 6๊นŒ์ง€์˜ ๋ˆˆ์„ ๊ฐ€์ง„ 3๊ฐœ์˜ ์ฃผ์‚ฌ์œ„๋ฅผ ๋˜์ ธ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์— ๋”ฐ๋ผ ์ƒ๊ธˆ์„ ๋ฐ›๋Š” ๊ฒŒ์ž„์ด ์žˆ๋‹ค.

  1. ๊ฐ™์€ ๋ˆˆ์ด 3๊ฐœ๊ฐ€ ๋‚˜์˜ค๋ฉด 10,000์›+(๊ฐ™์€ ๋ˆˆ)×1,000์›์˜ ์ƒ๊ธˆ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. 
  2. ๊ฐ™์€ ๋ˆˆ์ด 2๊ฐœ๋งŒ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ์—๋Š” 1,000์›+(๊ฐ™์€ ๋ˆˆ)×100์›์˜ ์ƒ๊ธˆ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. 
  3. ๋ชจ๋‘ ๋‹ค๋ฅธ ๋ˆˆ์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ์—๋Š” (๊ทธ ์ค‘ ๊ฐ€์žฅ ํฐ ๋ˆˆ)×100์›์˜ ์ƒ๊ธˆ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค.  

์˜ˆ๋ฅผ ๋“ค์–ด, 3๊ฐœ์˜ ๋ˆˆ 3, 3, 6์ด ์ฃผ์–ด์ง€๋ฉด ์ƒ๊ธˆ์€ 1,000+3×100์œผ๋กœ ๊ณ„์‚ฐ๋˜์–ด 1,300์›์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. ๋˜ 3๊ฐœ์˜ ๋ˆˆ์ด 2, 2, 2๋กœ ์ฃผ์–ด์ง€๋ฉด 10,000+2×1,000 ์œผ๋กœ ๊ณ„์‚ฐ๋˜์–ด 12,000์›์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. 3๊ฐœ์˜ ๋ˆˆ์ด 6, 2, 5๋กœ ์ฃผ์–ด์ง€๋ฉด ๊ทธ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด 6์ด๋ฏ€๋กœ 6×100์œผ๋กœ ๊ณ„์‚ฐ๋˜์–ด 600์›์„ ์ƒ๊ธˆ์œผ๋กœ ๋ฐ›๊ฒŒ ๋œ๋‹ค.

3๊ฐœ ์ฃผ์‚ฌ์œ„์˜ ๋‚˜์˜จ ๋ˆˆ์ด ์ฃผ์–ด์งˆ ๋•Œ, ์ƒ๊ธˆ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑ ํ•˜์‹œ์˜ค.

 

 

์ž…๋ ฅ 1

3 3 6

์ถœ๋ ฅ 2

1300

 

์ž…๋ ฅ 2

2 2 2

์ถœ๋ ฅ 2

12000

 

์ž…๋ ฅ 3

6 2 5

์ถœ๋ ฅ 3

600

 

 

์ฝ”๋“œ

#include<iostream>

using namespace std;

bool equals(int rValue,int lValue, int* outValue) {
    if (rValue == lValue) {
        *outValue = rValue;
        return true;
    }
    else
        return false;
}

int main() {
    
    int firstDice, secondDice, thirdDice;
    int value=0;
    cin >> firstDice >> secondDice >> thirdDice;
    
    if (firstDice == secondDice&& secondDice == thirdDice) {     //๋งŒ์•ฝ ์„ธ๊ฐœ๊ฐ€ ๊ฐ™์€ ๊ฐ’์ด๋ฉด
        cout << 10000 + firstDice * 1000;
    }
    else if (equals(firstDice,secondDice,&value)
        || equals(secondDice, thirdDice, &value)
        || equals(firstDice, thirdDice, &value)) {     //๋งŒ์•ฝ ๋‘๊ฐœ๊ฐ€ ๊ฐ™์€ ๊ฐ’์ด๋ฉด
        cout<<1000+ value *100;
    }
    else {
        //๊ทธ ์ค‘ ๊ฐ€์žฅ ํฐ๋ˆˆ
        value = max(max(firstDice, secondDice), thirdDice);
        cout << value * 100;
    }

    return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด๋ณด๊ธฐ์—์„œ if๋ฌธ ์ฃผ์ œ๋กœ ์ถ”๊ฐ€ ๋ถ„๋ฅ˜๋œ ๋ฌธ์ œ์—ฌ์„œ ํ’€์–ด๋ณด์•˜๋‹ค.

๋ง๊ทธ๋Œ€๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ if-else if-else๋ฌธ์„ ํ†ตํ•˜์—ฌ ์ด 3๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•˜๋ฉด ๋œ๋‹ค.

 if (firstDice == secondDice&& secondDice == thirdDice)

์ด๋ถ€๋ถ„์€ ์ฒซ๋ฒˆ์งธ ์ฃผ์‚ฌ์œ„์™€ ๋‘๋ฒˆ์งธ ์ฃผ์‚ฌ์œ„์˜ ์ˆซ์ž๊ฐ€ ๊ฐ™๊ณ  ๋‘๋ฒˆ์งธ ์ฃผ์‚ฌ์œ„์™€ ์„ธ๋ฒˆ์งธ ์ฃผ์‚ฌ์œ„์˜ ์ˆซ์ž๊ฐ€ ๊ฐ™์„๋•Œ, 'A์™€ B๊ฐ€ ๊ฐ™๊ณ  B์™€ C๊ฐ€ ๊ฐ™์œผ๋ฉด A์™€ C๋Š” ๊ฐ™๋‹ค'๋ผ๋Š” ๊ณต๋ฆฌ๋ฅผ ํ†ตํ•ด ๋‘๊ฐ€์ง€์˜ ์›๋ฆฌ๊ฐ€ true๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์„ธ ๊ฐ€์ง€์˜ ๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

bool equals(int rValue,int lValue, int* outValue) {
    if (rValue == lValue) {
        *outValue = rValue;
        return true;
    }
    else
        return false;
}

equals()ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ else if๋ฌธ ์•ˆ์—์„œ ๋งŒ์•ฝ ๋‘๊ฐœ๊ฐ€ ๊ฐ™์€ ๊ฐ’์ด๋ฉด value์— ๊ทธ ๊ฐ’์„ ์ง‘์–ด๋„ฃ์–ด์„œ ์ถœ๋ ฅํ• ๋•Œ ์“ธ์ˆ˜ ์žˆ๊ฒŒ๋” ์ œ์ž‘ํ•˜์˜€๋‹ค. ๊ทธ์ค‘ outValue๋งŒ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” rValue์™€ lValue์˜ ๊ฒฝ์šฐ ์–•์€ ๋ณต์‚ฌ๋ฅผ ํ†ตํ•ด ์ˆซ์ž๊ฐ’๋งŒ ๋“ค๊ณ ์™€์„œ ๋น„๊ตํ•˜๋ฉด ๋˜์ง€๋งŒ outValue์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผํ•˜๊ธฐ๋•Œ๋ฌธ์— ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ํ•„์š”ํ•ด์„œ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

else {
        //๊ทธ ์ค‘ ๊ฐ€์žฅ ํฐ๋ˆˆ
        value = max(max(firstDice, secondDice), thirdDice);
        cout << value * 100;
    }

๋งˆ์ง€๋ง‰์œผ๋กœ ์„ธ๊ฐœ์˜ ๊ฐ’์ด ๋ชจ๋‘ ๋‹ค๋ฅธ ๊ฒฝ์šฐ max()ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋จผ์ € ์ฒซ๋ฒˆ์งธ ์ˆ˜์™€ ๋‘๋ฒˆ์งธ ์ˆ˜์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ๋น„๊ตํ•œ ํฐ ๊ฐ’๊ณผ ์„ธ๋ฒˆ์งธ ์ˆ˜์˜ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ์ œ์ผ ํฐ ์ˆ˜๋ฅผ value์— ๋„ฃ์–ด์„œ ์ถœ๋ ฅํ•˜๋„๋ก ํ•˜์˜€๋‹ค.

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

๋ฐ˜์‘ํ˜•
728x90

๋ฌธ์ œ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 10,000), ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ V๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ„์„ ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๊ฐ„์„ ์€ ์–‘๋ฐฉํ–ฅ์ด๋‹ค.

 

 

์ž…๋ ฅ

4 5 1
1 2
1 3
1 4
2 4
3 4

์ถœ๋ ฅ

1 2 4 3
1 2 3 4

 

์ฝ”๋“œ

#include<iostream>
#include<vector>
#include<queue>
#include<string>
#include<algorithm>
using namespace std;

// 1260๋ฒˆ DFS์™€ BFS

//๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰
void dfs(vector<int> inputGraph[], bool *visited,int index) {
	visited[index] = true;		//๋ฐฉ๋ฌธํ–ˆ์Œ์„ ํ‘œ์‹œ
	cout << index<<" ";
	//dfs ํƒ์ƒ‰ ์ˆœ์„œ
	int grphSize = inputGraph[index].size();
	for (int i = 0; i < grphSize; i++) {
		int connectIdx = inputGraph[index][i];
		if (!visited[connectIdx])
			dfs(inputGraph, visited, connectIdx);
	}
}

//๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰
void bfs(vector<int> inputGraph[],bool *visited,int index) {
	queue<int> que;
	que.push(index);
	visited[index] = true;
	//bfs ํƒ์ƒ‰ ์ˆœ์„œ
	while (!que.empty()) {
		int visitIdx = que.front();
		que.pop();
		cout << visitIdx<<" ";
		int grphSize = inputGraph[visitIdx].size();
		for (int i = 0; i < grphSize; i++) {
			//๋ฐฉ๋ฌธํ•œ Idx์™€ ์—ฐ๊ฒฐ๋œ ์›์†Œ๋“ค์„ que์— ๋„ฃ๊ธฐ
			int connectIdx = inputGraph[visitIdx][i];
			if (!visited[connectIdx]) {		//๋งŒ์•ฝ ์—ฐ๊ฒฐ๋œ ์›์†Œ๋ฅผ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
				que.push(connectIdx);		//๋ฐฉ๋ฌธํ•  ๋…ธ๋“œ๋กœ ์„ ์ •
				visited[connectIdx] = true;
			}
		}
	}
	
	
}

int main() {

	int N, M, V;		//์ •์ ์˜ ๊ฐœ์ˆ˜, ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜, ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ

	cin >> N >> M >> V;

	int size = N + 1;
	//N๊ฐœ๋งŒํผ์˜ ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ
	bool* visited = new bool[size] {false, };			//๋ฐฉ๋ฌธ ์œ ๋ฌด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด
	vector<int>* graph = new vector<int>[size];
	graph->push_back(1);

	for (int i = 0; i < M; i++) {
		int origin, connect;
		cin >> origin >> connect;
		graph[origin].push_back(connect);
		graph[connect].push_back(origin);
	}

	//์ •๋ ฌ
	for (int i = 0; i < size; i++) {
		sort(graph[i].begin(),graph[i].end());
	}

	dfs(graph,visited, V);
	cout << endl;
	visited = new bool[size]{ false, };		//๋ฐฉ๋ฌธ์œ ๋ฌด๋ฅผ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”ํ•ด์คŒ(์žฌ์‚ฌ์šฉ ์œ„ํ•ด)
	bfs(graph, visited,V);

	delete [] visited;		//๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ 
	//vector ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
	graph->clear();
	vector<int>().swap(*graph);

	return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

DFS์™€ BFS๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. DFS๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋„๋ก ์ž‘์„ฑํ•˜์˜€๊ณ , BFS๋Š” ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋งŒ ๋‹ค์‹œ ํƒ์ƒ‰ํ•ด์„œ ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด ์ข…๋ฃŒ๋˜๋„๋ก ์ž‘์„ฑํ•˜์˜€๋‹ค. DFS์™€ BFS์˜ ๊ฒฝ์šฐ 

https://better-tomorrow.tistory.com/entry/DFS-BFS-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

DFS & BFS ์ดํ•ดํ•˜๊ธฐ ๋ฐ ๊ตฌํ˜„(C++)

DFS : Depth First Search(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) - ๊ทธ๋ž˜ํ”„ ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜. (์™„๋ฒฝํžˆ ํƒ์ƒ‰) - ์‹œ์ž‘์ ๋ถ€ํ„ฐ ๋‹ค์Œ branch๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น branch๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๋ฐฉ๋ฒ•. - [์žฌ๊ท€ํ•จ์ˆ˜]

better-tomorrow.tistory.com

ํ•ด๋‹น ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ์ž์„ธํ•˜๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค. DFS์™€ BFS์— ๋Œ€ํ•ด ์•Œ๊ณ ์‹ถ์œผ๋ฉด ์œ„์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ์ข‹์„๋“ฏํ•˜๋‹ค.

for (int i = 0; i < M; i++) {
    int origin, connect;
    cin >> origin >> connect;
    graph[origin].push_back(connect);
    graph[connect].push_back(origin);
}

์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ณผ์ •์—์„œ ์—ฐ๊ฒฐ๋œ 2๊ฐœ๋ฅผ ์ž…๋ ฅ ๋ฐ›์„์‹œ ์„œ๋กœ ๊ฐ์ž์˜ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ž…๋ ฅ์‹œํ‚ค๋„๋ก ํ•œ๋‹ค.

//์ •๋ ฌ
for (int i = 0; i < size; i++) {
    sort(graph[i].begin(),graph[i].end());
}

์ž…๋ ฅ์‹œํ‚จ ์ •๋ณด๋“ค์„ sort๋ฅผ ํ†ตํ•ด ์ •๋ ฌ์„ ์‹œ์ผœ์ค€๋‹ค. ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ์›ํ•˜๋Š”๋Œ€๋กœ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ ฌ์„ ๊ผญ ํ•ด์ค€๋‹ค.

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

๋ฐ˜์‘ํ˜•
728x90

๋ฌธ์ œ

์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ํ๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๋ช…๋ น์€ ์ด ์—ฌ์„ฏ ๊ฐ€์ง€์ด๋‹ค.

  • push X: ์ •์ˆ˜ X๋ฅผ ํ์— ๋„ฃ๋Š” ์—ฐ์‚ฐ์ด๋‹ค.
  • pop: ํ์—์„œ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ๋นผ๊ณ , ๊ทธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • size: ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • empty: ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • front: ํ์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • back: ํ์˜ ๊ฐ€์žฅ ๋’ค์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…๋ ฅ

15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front

์ถœ๋ ฅ

1
2
2
0
1
2
-1
0
1
-1
0
3

 

์ฝ”๋“œ

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

// 10845๋ฒˆ ํ

//ํ ๊ตฌํ˜„
class QueueS {
public:
	int front;
	int back;
	int size;
	int *values;		//๋ชจ๋“  ๊ฐ’๋“ค์„ ๋‹ด์€ ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ

	//์ƒ์„ฑ์ž
	QueueS() {
		size = 10001;		//ํ์˜ ์‚ฌ์ด์ฆˆ 
		values = new int[size];
		front = 0;
		back=0;
	}
	//์†Œ๋ฉธ์ž
	~QueueS() {
		delete[] values;
	}

	void push(int data) {
		if ((back+1)%size!=front) {
			values[back] = data;
			back = (back + 1) % size;
		}
	}

	void pop() {
		front = (front + 1) % size;
	}

	bool empty() {
		if (back == front)
			return true;
		else
			return false;
	}
};

QueueS st;

void getNumSize(string str) {
	int temp;

	if (str == "back") {
		if (st.back - st.front != 0) {
			cout << st.values[st.back - 1] << "\n";
		}
		else cout << "-1\n";
	}
	else if (str == "front") {
		if (st.back - st.front != 0) {
			cout << st.values[st.front] << "\n";
		}
		else cout << "-1\n";
	}
	else if (str == "size") {
		cout << st.back-st.front << "\n";
	}
	else if (str == "empty") {
		cout << ((st.back - st.front==0)?true:false) << "\n";
	}
	else if (str == "pop") {
		if (st.back - st.front!=0) {
			cout << st.values[st.front] << "\n";
			st.pop();
		}
		else {
			cout << "-1\n";
		}
	}
	else if (str == "push")
	{
		cin >> temp;
		st.push(temp);
	}
}

int main() {

	int n;
	string str;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> str;
		getNumSize(str);
	}

	return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

ํ๋ฅผ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ํ ํด๋ž˜์Šค์˜ front,back์€ ์ผ์ข…์˜ ๋งจ ์•ž์˜ index ๋ฒˆํ˜ธ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด๊ณ , back์€ ๋งจ ๋’ค์˜ index๋ฒˆํ˜ธ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  int* values๋ฅผ ํ†ตํ•ด์„œ ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’๋“ค์„ back์„ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ์ €์žฅํ•˜์˜€๋‹ค.

 

 

C ๊ตฌ์กฐ์ฒด์™€ C++์˜ queue ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์‹  ๋ถ„๋„ ์žˆ์—ˆ๋‹ค.

https://blockdmask.tistory.com/119

 

[๋ฐฑ์ค€ 10845] ํ (C, C++ Queue)

์•ˆ๋…•ํ•˜์„ธ์š”.BlockDMask ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์˜๊ตญ์— ์˜จ์ง€ ์ดํ‹€์งธ ๋˜๋Š”๋‚ ์ž…๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์›ํ•˜๋Š” ๋ฐ๋กœ ์ €๋Š” ์˜๊ตญ ๋Ÿฐ๋˜ ๋ฆฌ์  ํŠธ ๊ณต์› ๋ฒค์น˜์— ์•‰์•„์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์ง‘์ค‘์ด ์•ˆ๋˜์„œ; ์‰ฌ์šด ์ž

blockdmask.tistory.com

๋‚ด ์ฝ”๋“œ๋Š” ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๊ธธ์–ด์„œ.. ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ฐธ๊ณ ํ•˜๋‹ค ๋ณด๋‹ˆ ์•„๋ฌด๋ž˜๋„ cout๋ฌธ์ œ๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ printf๋กœ ํ•œ๋ฒˆ ๋‹ค ๋ฐ”๊ฟ”๋ณด์•˜๋‹ค.

 

๊ทธ๋ ‡๊ฒŒ๊นŒ์ง€ ์˜ํ–ฅ์„ ์ค€๊ฑด ์•„๋‹Œ๊ฐ€๋ณด๋‹ค ์‹ถ์–ด์„œ ์ข€ ๋” ์ฐพ์•„๋ณด๋‹ˆ

https://coding-insider.tistory.com/entry/cin-cout-%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%86%8D%EB%8F%84-%EB%B9%A0%EB%A5%B4%EA%B2%8C%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

cin, cout ์ž…์ถœ๋ ฅ ์†๋„ ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•

scanf์™€ cin์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์†๋„๋ฉด์—์„œ ํฐ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. 1 2 3 ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cs + endl ๋ณด๋‹ค..

coding-insider.tistory.com

cin์˜ ์†๋„๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์—„์ฒญ ๋Š๋ฆฌ๋‹ค๋Š”๊ฒƒ! 

ios_base :: sync_with_stdio(false); 
cin.tie(NULL); 
cout.tie(NULL);

์ด ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋นจ๋ผ์ง„๋‹ค๊ณ ๋Š” ํ•˜๋‚˜ scanf,printf์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๊ณ  ์‹ฑ๊ธ€์“ฐ๋ ˆ๋“œ ์˜์—ญ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์„œ ์‹ค์ œ ์ฝ”๋“œ ์˜์—ญ์—์„œ๋Š” ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•˜๋ผ๊ณ  ํ•œ๋‹ค.

์ผ๋‹จ ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ์˜์—ญ์ด๋‹ˆ ์Ÿค๋“ค์„ ์ถ”๊ฐ€ํ•ด์„œ ํ•œ๋ฒˆ ๋Œ๋ ค๋ณด์•˜๋‹ค.

 

์†๋„๋Š” ๋นจ๋ผ์กŒ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋Š˜์–ด๋‚ฌ๋‹ค.. ๊ทธ๋Ÿฌ๋ฉด scanf,printf๋กœ ๋‹ค ๋ฐ”๊ฟ”๋ณด๊ฒ ๋‹ค.

 

๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋„ ์ค„์–ด๋“ค์—ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ scanf,printf๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์•ž์œผ๋กœ๋„ ์จ์•ผ๊ฒ ๋‹ค.

 

์ฝ”๋“œ(scanf,printf)

#include<iostream>
#include<string.h>
using namespace std;

// 10845๋ฒˆ ํ
//ํ ๊ตฌํ˜„
class QueueS {
public:
	int front;
	int back;
	int size;
	int *values;		//๋ชจ๋“  ๊ฐ’๋“ค์„ ๋‹ด์€ ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ

	//์ƒ์„ฑ์ž
	QueueS() {
		size = 10001;		//ํ์˜ ์‚ฌ์ด์ฆˆ 
		values = new int[size];
		front = 0;
		back = 0;
	}
	//์†Œ๋ฉธ์ž
	~QueueS() {
		delete[] values;
	}

	void push(int data) {
		if ((back + 1) % size != front) {
			values[back] = data;
			back = (back + 1) % size;
		}
	}

	void pop() {
		front = (front + 1) % size;
	}

	bool empty() {
		if (back == front)
			return true;
		else
			return false;
	}
};

QueueS st;

void getNumSize(char str[]) {
	int temp;

	if (!strcmp(str, "back")) {
		if (st.back - st.front != 0) {
			printf("%d\n", st.values[st.back - 1]);
		}
		else printf("-1\n");
	}
	else if (!strcmp(str,"front")) {
		if (st.back - st.front != 0) {
			printf("%d\n", st.values[st.front]);
		}
		else printf("-1\n");
	}
	else if (!strcmp(str ,"size")) {
		printf("%d\n", st.back - st.front);
	}
	else if (!strcmp(str,"empty")) {
		printf("%d\n", ((st.back - st.front == 0) ? true : false));
	}
	else if (!strcmp(str, "pop")) {
		if (st.back - st.front != 0) {
			printf("%d\n", st.values[st.front]);
			st.pop();
		}
		else {
			printf("-1\n");
		}
	}
	else if (!strcmp(str,"push"))
	{
		scanf("%d", &temp);
		st.push(temp);
	}
}

int main() {

	int n;
	char str[6];
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%s", str);
		getNumSize(str);
	}

	return 0;
}

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

๋ฐ˜์‘ํ˜•

+ Recent posts