https://school.programmers.co.kr/learn/courses/30/lessons/17681
나뉘어진 두개의 지도를 합치기만 하면 되는 문제이다. 문제에서도 나와있지만, 두 지도에서 같은 칸에 하나라도 벽이 있다면, 벽이 있다는 뜻이라고 한다. 즉, 그냥 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;
}
'coding_test > programmers' 카테고리의 다른 글
lv2 / K진수에서 소수 개수 구하기 / 카카오 / C++ (0) | 2022.09.01 |
---|---|
lv2 / 두 큐 합 같게 만들기 / 카카오 / C++ (0) | 2022.09.01 |
lv1 / 실패율 / 카카오 기출 / C++ (0) | 2022.08.03 |
lv2 / 거리두기 확인하기 / 카카오 기출 / C++ (0) | 2022.08.03 |
lv1 / 크레인 인형 뽑기 게임 / 카카오 기출 / C++ (0) | 2022.07.27 |