ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 비밀지도
    카테고리 없음 2020. 9. 6. 19:20

    풀이)

    비트마스킹을 이해했다면 풀 수 있는 문제이다.


    처음 풀이)

    arr1의 원소와 arr2 원소 따로 따로 보면서 벽인 곳을 바꿔줬다.


    #include <string>
    #include <vector>
    #include <iostream>
    using namespace std;
    
    vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
        vector<string> answer;
        string tmp ="";
        for(int i=0;i<n;i++){
            tmp += ' ';
        }
    
        for(int i=0;i<n;i++){
            answer.push_back(tmp);
        }
    
        for(int i=0;i<n;i++){
            int a = arr1[i];
            int idx = 0;
            while(a && idx < n){
                if(a & 1 << idx){
                    answer[i][n-1-idx] = '#';
                     a -= 1 << idx;
                }
                idx++;
            }
    
            int b = arr2[i];
            idx =0;
            while(b && idx < n){
                if(b & 1 << idx){
                    answer[i][n-1-idx] = '#';
                    b -= 1 << idx;
                }
                idx++;
            }
           // cout << "answer = : " << answer[i] << endl;
        }
        return answer;
    }



    간편해진 코드)


    따로따로 하지않고, arr1과 arr2의 원소를 OR연산을 통해

    미리 벽 위치에 해당하는 bit를 1로 바꿔둔다.


    #include <string> #include <vector> #include <iostream> using namespace std; vector<string> solution(int n, vector<int> arr1, vector<int> arr2) { vector<string> answer; string tmp =""; for(int i=0;i<n;i++){ tmp += ' '; } for(int i=0;i<n;i++){ answer.push_back(tmp); } for(int i=0;i<n;i++){ int a = arr1[i] | arr2[i]; //OR연산자를 통해 미리 벽인 곳을 합쳐둔다. int idx = 0; while(a && idx < n){ if(a & 1 << idx){ answer[i][n-1-idx] = '#'; a -= 1 << idx; } idx++; } } return answer; }



    미리 answer vector에 넣지 않는 방법)

    #include <string>
    #include <vector>

    #include <iostream> 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] |= 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; }


    댓글

Designed by Tistory.