coding_test/programmers

lv1 / [1차] 비밀지도 / 카카오 기출 / C++

CodeJin 2022. 8. 7. 16:10

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


나뉘어진 두개의 지도를 합치기만 하면 되는 문제이다. 문제에서도 나와있지만, 두 지도에서 같은 칸에 하나라도 벽이 있다면, 벽이 있다는 뜻이라고 한다. 즉, 그냥 bitwise OR연산을 진행하면 된다. 각 배열의 요소를 모두 OR연산을 진행한 후에, 이를 2진수로 바꾸고, 0과 1을 각각 공백과 #으로 바꿔주면 된다.

 

이번 문제를 통해 비트를 다룰때 쓰기 좋은 bitset STL을 알게 되었다. 맨날 귀찮게 2진수로 바꾸는 함수를 구현해서 썼었는데, 훨씬 간편해졌다.

 

#include <bits/stdc++.h>
using namespace std;

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;
    for(int i = 0; i < n; i++) {
        int dec = arr1[i] | arr2[i];
        bitset<16> bin = dec;
        string bin_str;
        for(int j = n - 1; j >= 0; j--) {
            if (bin[j]) bin_str += "#";
            else bin_str += " ";
        }
        answer.push_back(bin_str);
    }
    return answer;
}