[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค :: ๋น„๋ฐ€์ง€๋„ (๋ฌธ์ œ ํ’€์ด, ์ฝ”๋“œ)

 

๋น„๋ฐ€์ง€๋„

 

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/17681

 

๋น„๋ฐ€์ง€๋„

๋„ค์˜ค๋Š” ํ‰์†Œ ํ”„๋กœ๋„๊ฐ€ ๋น„์ƒ๊ธˆ์„ ์ˆจ๊ฒจ๋†“๋Š” ์žฅ์†Œ๋ฅผ ์•Œ๋ ค์ค„ ๋น„๋ฐ€์ง€๋„๋ฅผ ์†์— ๋„ฃ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด ๋น„๋ฐ€์ง€๋„๋Š” ์ˆซ์ž๋กœ ์•”ํ˜ธํ™”๋˜์–ด ์žˆ์–ด ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•”ํ˜ธ๋ฅผ ํ•ด๋…ํ•ด์•ผ ํ•œ๋‹ค. ๋‹คํ–‰ํžˆ ์ง€๋„ ์•”ํ˜ธ๋ฅผ ํ•ด๋…ํ•  ๋ฐฉ๋ฒ•์„ ์ ์–ด๋†“์€ ๋ฉ”๋ชจ๋„ ํ•จ๊ป˜ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

  1. ์ง€๋„๋Š” ํ•œ ๋ณ€์˜ ๊ธธ์ด๊ฐ€ n์ธ ์ •์‚ฌ๊ฐํ˜• ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ, ๊ฐ ์นธ์€ ๊ณต๋ฐฑ(" ) ๋˜๋Š”๋ฒฝ(#") ๋‘ ์ข…๋ฅ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  2. ์ „์ฒด ์ง€๋„๋Š” ๋‘ ์žฅ์˜ ์ง€๋„๋ฅผ ๊ฒน์ณ์„œ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ ์ง€๋„ 1๊ณผ ์ง€๋„ 2๋ผ๊ณ  ํ•˜์ž. ์ง€๋„ 1 ๋˜๋Š” ์ง€๋„ 2 ์ค‘ ์–ด๋Š ํ•˜๋‚˜๋ผ๋„ ๋ฒฝ์ธ ๋ถ€๋ถ„์€ ์ „์ฒด ์ง€๋„์—์„œ๋„ ๋ฒฝ์ด๋‹ค. ์ง€๋„ 1๊ณผ ์ง€๋„ 2์—์„œ ๋ชจ๋‘ ๊ณต๋ฐฑ์ธ ๋ถ€๋ถ„์€ ์ „์ฒด ์ง€๋„์—์„œ๋„ ๊ณต๋ฐฑ์ด๋‹ค.
  3. ์ง€๋„ 1๊ณผ ์ง€๋„ 2๋Š” ๊ฐ๊ฐ ์ •์ˆ˜ ๋ฐฐ์—ด๋กœ ์•”ํ˜ธํ™”๋˜์–ด ์žˆ๋‹ค.
  4. ์•”ํ˜ธํ™”๋œ ๋ฐฐ์—ด์€ ์ง€๋„์˜ ๊ฐ ๊ฐ€๋กœ์ค„์—์„œ ๋ฒฝ ๋ถ€๋ถ„์„ 1, ๊ณต๋ฐฑ ๋ถ€๋ถ„์„ 0์œผ๋กœ ๋ถ€ํ˜ธํ™”ํ–ˆ์„ ๋•Œ ์–ป์–ด์ง€๋Š” ์ด์ง„์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์˜ ๋ฐฐ์—ด์ด๋‹ค.

secret map

๋„ค์˜ค๊ฐ€ ํ”„๋กœ๋„์˜ ๋น„์ƒ๊ธˆ์„ ์†์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋„๋ก, ๋น„๋ฐ€์ง€๋„์˜ ์•”ํ˜ธ๋ฅผ ํ•ด๋…ํ•˜๋Š” ์ž‘์—…์„ ๋„์™€์ค„ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

 

์ž…๋ ฅ ํ˜•์‹

์ž…๋ ฅ์œผ๋กœ ์ง€๋„์˜ ํ•œ ๋ณ€ ํฌ๊ธฐ n ๊ณผ 2๊ฐœ์˜ ์ •์ˆ˜ ๋ฐฐ์—ด arr1, arr2๊ฐ€ ๋“ค์–ด์˜จ๋‹ค.

  • 1 โ‰ฆ n โ‰ฆ 16
  • arr1, arr2๋Š” ๊ธธ์ด n์ธ ์ •์ˆ˜ ๋ฐฐ์—ด๋กœ ์ฃผ์–ด์ง„๋‹ค.
  • ์ •์ˆ˜ ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ x๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ์˜ ๊ธธ์ด๋Š” n ์ดํ•˜์ด๋‹ค. ์ฆ‰, 0 โ‰ฆ x โ‰ฆ 2n - 1์„ ๋งŒ์กฑํ•œ๋‹ค.

 

์ถœ๋ ฅ ํ˜•์‹

์›๋ž˜์˜ ๋น„๋ฐ€์ง€๋„๋ฅผ ํ•ด๋…ํ•˜์—ฌ '#', ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด ๋ฐฐ์—ด๋กœ ์ถœ๋ ฅํ•˜๋ผ.

 

์ž…์ถœ๋ ฅ ์˜ˆ์ œ

๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’
n 5
arr1 [9, 20, 28, 18, 11]
arr2 [30, 1, 21, 17, 28]
์ถœ๋ ฅ ["#####","# # #", "### #", "# ##", "#####"]
๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’
n 6
arr1 [46, 33, 33 ,22, 31, 50]
arr2 [27 ,56, 19, 14, 14, 10]
์ถœ๋ ฅ ["######", "### #", "## ##", " #### ", " #####", "### # "]

 

 

์ฝ”๋“œ

#include <string>
#include <vector>

using namespace std;

string numToString(int num){
    string tmp;
    while(num!=0){
        if(num%2==1)
            tmp.push_back('#');
        else
            tmp.push_back(' ');
        num/=2;
    }
    string result;
    for(int i=tmp.length()-1; i>=0; i--){
        result.push_back(tmp[i]);
    }
    return result;
}

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;
    int size = arr1.size();
    int max = 0;

    for(int i=0; i<size; i++){
        int tmp = (arr1[i] | arr2[i]);
        answer.push_back(numToString(tmp));
        if(max<tmp)
            max=tmp;
    }

    int pow_num=0;
    while(max>0){
        max/=2;
        pow_num++;
    }

    for(int i=0; i<size; i++){
        if(answer[i].length()<pow_num){
            int dif = pow_num-answer[i].length();
            answer[i].insert(answer[i].begin(), dif,' ');
        }
    }

    return answer;
}

 

ํ’€์ด

๊ทธ๋ƒฅ ํ–‰์—ด์˜ ๊ฐ ํ–‰์„ |(or) ์—ฐ์‚ฐํ•œ ํ›„, ํ•ด๋‹น ์ˆ˜๋ฅผ 2์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ string์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

ํ•œ๊ฐ€์ง€ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ํ–‰์˜ ๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฒƒ์— ๋งž์ถฐ์ ธ์žˆ๋‹ค๋Š” ๊ฒƒ. ๋ฌผ๋ก  ์ฝ”๋“œ ์‹œ์ž‘ ์ „ ๊ฐ€์žฅ ๊ธด ๊ธธ์ด์˜ ์ฝ”๋“œ๋ฅผ ์ฐพ์•„๋„ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๋‹ค ์ฐจ๋ก€๋กœ ๊ณ„์‚ฐํ•˜๊ณ  ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ๊ธด ๊ธธ์ด์˜ ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์„œ, string ์•ž์— ๊ณต๋ฐฑ์„ ๋”ํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

์ถ”๊ฐ€

์—ฌ๊ธฐ์„œ ํ–‰์—ด์˜ ๊ธธ์ด๊ฐ€ n์œผ๋กœ ์ฃผ์–ด์ ธ์žˆ์œผ๋ฏ€๋กœ ๊ฐ ์ˆซ์ž๋Š” 2^n๋ณด๋‹ค ์ž‘๋‹ค. ์ด ์‚ฌ์‹ค์„ ์ด์šฉํ•˜๋ฉด ๊ฐ€์žฅ ๊ธด ๊ธธ์ด์˜ ์ฝ”๋“œ๋ฅผ ์ฐพ์ง€ ์•Š์•„๋„ n์œผ๋กœ string ์•ž์— ๊ณต๋ฐฑ์„ ๋”ํ•ด์ค„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์ฑ„์  ๊ฒฐ๊ณผ

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด

string์ด๋ผ๊ณ  push_back, insert ๋“ฑ์˜ ์—ฐ์‚ฐ์„ ๋„ˆ๋ฌด ๋งŽ์ด ์“ด ๊ฒƒ ๊ฐ™๋‹ค. ์‚ฌ์‹ค + ์—ฐ์‚ฐ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํ’€์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์ด์—ˆ๋‹ค ^^..

๋˜ํ•œ ์ค‘๊ฐ„์— string์„ ๋’ค์ง‘์„ ๋•Œ๋Š” reverse ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.

๋ฐ˜์‘ํ˜•