• [ 문제 ]

#비밀지도

네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 네오가 프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의 암호를 해독하는 작업을 도와줄 프로그램을 작성하라.
programmers.co.kr
  •  My Code
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;

    string binary1 = "";
    string binary2 = "";
    string sum = "";
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (arr1[i] % 2 == 0)
            {
                binary1.push_back(' ');
                arr1[i] /= 2;
            }
            else
            {
                binary1.push_back('#');
                arr1[i] /= 2;
            }
            if (arr2[i] % 2 == 0)
            {
                binary2.push_back(' ');
                arr2[i] /= 2;

            }
            else
            {
                binary2.push_back('#');
                arr2[i] /= 2;
            }
        }
        for (int j = n - 1; j >= 0; j--)
        {
            if (binary1[j] == '#' || binary2[j] == '#')
                sum.push_back('#');
            else
                sum.push_back(' ');
        }
        answer.push_back(sum);
        sum.clear();
        binary1.clear();
        binary2.clear();
    }
    return answer;
}
  •  Best Code
#include <string>
#include <vector>

using namespace std;

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;
    for(int i=0; i <n; i++){
        arr1[i] = arr1[i]|arr2[i];
        string ans = "";
        for(int j = 0; j<n; j++){
            if(arr1[i] % 2 == 0) ans = " " + ans;
            else ans = "#" + ans;
            arr1[i] = arr1[i] >> 1;
        }
        answer.push_back(ans);
    }
    return answer;
}

 

" 비트 연산자를 사용할 생각을 하였는가 !! "


  • CheckPoint
  1.  나는 2개의 숫자 배열에 대한 각각의 " "(0) , "#"(1) 로 전환된 이진수 문자열 배열을 만들기 위해서 따로 문자열 변수를 선언 후
  2. N 번 진행하면서 매번 만들어진 두 문자열끼리 원소를 조건문을 통해서 연산을 통해 answer 문자열 벡터에 연산을 통해 만들어진 이진수문자열을 삽입하고 마지막 answer 문자열 벡터를 반환하는 식으로 작성했다.
  3. 문제는 이렇게 풀어보니, 정수를 이진수를 의미하는 ' ', '#' 문자열로 만드는 과정에서 push_back 함수 가지고서만 해결하다보니 문자열이 뒤집어 지는 것도 생각을 해줘야해서 마지막에 두 이진수 문자열 간에 연산할 때
    두 문자열을 문자열 마지막부터 앞으로 후진하면서 문자간 연산한 것을
    정답 문자열 벡터에 넣어줘야했다.
    ( 이는 이진수를 -> 십진수로 전환하는데에는 내가 얻어낸 문자열이랑은 연산이 반대이니깐! )
  4.  끝내 결론은 무엇인가 ! 바로 "비트연산자" 를 생각해봐야 한다.
  5. [ 비트연산자 ]
    = 정수나 문자 등을 2진수로 변환한 후에 각 자리의 비트끼리 연산을 수행한다. 

 


728x90
반응형

+ Recent posts