[프로그래머스/C++]Lv.1 - [1차] 비밀지도

YH J·2023년 6월 5일
0

프로그래머스

목록 보기
116/168

문제 링크

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

내 풀이

arr1의 각 원소와 arr2의 각 원소들을 비트OR연산한다. 그 후 2의 n-1제곱부터 빼가면서 #인지 공백인지 검사하여 string을 완성한 뒤 answer에 넣어준다.
for문을 2개가 아닌 1개로 통합 할 수 있다.

내 코드

#include <string>
#include <vector>
#include <cmath>
#include <iostream>
using namespace std;

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;
    
    vector<int> arr;
    for(int i = 0; i < arr1.size(); i++)
    {
        arr.push_back((arr1[i] | arr2[i]));
    }
    for(int a : arr)
    {
        string s;
        for(int i = n - 1; i >= 0; i--)
        {
            int num = pow(2,i);
            if(a - num >= 0)
            {
                a -= num;
                s += '#';
            }
            else
                s += ' ';
        }
        answer.push_back(s);
    }
    
    return answer;
}

다른 사람의 풀이

#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;
}

다른 사람의 풀이 해석

똑같이 비트 OR 연산자로 합한 뒤 이진법을 계산할 때 2로 나눈 나머지가 있으면 #, 없으면 공백에 + ans를 한다( ans의 앞쪽에 #이나 공백을 추가해나간다.) 추가한 뒤 비트 이동 연산자로 2로 나누어준다

profile
게임 개발자 지망생

0개의 댓글