์ƒˆ์†Œ์‹

์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ฒด์œก๋ณต

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

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

 

 

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.