N

(프로그래머스 c++ KAKAO)[1차]비밀지도 본문

프로그래머스 알고리즘/KAKAO

(프로그래머스 c++ KAKAO)[1차]비밀지도

naeunchan 2020. 4. 30. 19:49
728x90
반응형

 

문제의 핵심은 OR 연산을 이용하는 것..!

 

arr1과 arr2의 i번째에 있는 두 수를 or연산을 통해 arr1[i] 번째에 다시 저장한다.

이때 string형 tmp를 선언한다.

OR 연산을 통해 나온 결과를 이진법을 통해 해석해야 한다.

2로 나누었을 때 나머지가 0이면 ' '(공백)을 tmp에 넣어주고,

나머지가 1이면 '#'을 tmp에 넣어준다.

이때, tmp의 사이즈는 n이어야 한다..!

while문을 통해 n만큼 문자를 넣어주고,

answer에 넣기 전에 reverse를 통해 tmp를 뒤집어주었다.

(tmp에 거꾸로 들어가기 때문에 바로잡기 위해 reverse() 함수를 사용하였다..!)

 

이 문제에서 많이 틀리는 부분이 아마 해석한 결과의 길이와 n이 같지 않아서일 것 같다..!

n의 길이만큼 채워져야 하기 때문에 이 부분만 조심하면 쉽게 풀 수 있을 것이다..!

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;
    
    for(int i = 0; i < n; i++)
    {
        string tmp = "";
        arr1[i] = arr1[i] | arr2[i];
        
        while(tmp.size() != n)
        {
            if(arr1[i] % 2 == 0)
                tmp.push_back(' ');
            else
                tmp.push_back('#');
            arr1[i] /= 2;
        }
        
        reverse(tmp.begin(), tmp.end());
        answer.push_back(tmp);
    }
    return answer;
}

 

728x90
반응형