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

+ Recent posts