반응형
문제출처
https://programmers.co.kr/learn/courses/30/lessons/17681
문제풀이
2장의 지도를 겹친 값을 얻기 위해 OR 연산을 사용했다. OR연산을 사용하면 문제에서 원하는 전체 지도를 얻을 수 있다. 이후 '#'(벽)과 ' '(공백)을 찾기 위해서는 비트연산을 사용했다. 예를 들어 전체지도의 값이 10진수로 19이라면 2진수로 10011로 나타낼 수 있다. 2진수로 나타낸 값과 1을 오른쪽으로 시프트 한 값(1<<j)의 AND 연산이 1이라면 벽을 추가하고 이외의 경우 공백을 추가하면 된다.
비트연산에 대해 이해가 되지 않는다면 아래글을 참조하자.
https://swjeong.tistory.com/114?category=781121
10011 & 00001 = 1
10011 & 00010 = 1
10011 & 00100 = 0
10011 & 01000 = 0
10011 & 10000 = 1
즉 answer에는 '## #'의 값이 들어가게 되는데 이는 뒤에서부터 진행한 결과이므로 결과값을 뒤집어 answer 벡터에 추가해주면 된다.
소스코드
#include <string>
#include <vector>
#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++) {
int sumValue = (arr1[i] | arr2[i]);
string ans = "";
for (int j=0; j<n; j++) {
if (sumValue & (1<<j)) ans+="#";
else ans+=" ";
}
reverse(ans.begin(), ans.end());
answer.push_back(ans);
}
return answer;
}
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스 17682 - 카카오 2018 1차] 캐시 (0) | 2020.05.02 |
---|---|
[프로그래머스 17682 - 카카오 2018 1차] 다트 게임 (0) | 2020.04.29 |
[BOJ 16234] 인구 이동 (0) | 2020.04.27 |
[BOJ 17144] 미세먼지 안녕! (0) | 2020.04.24 |
[BOJ 14500] 테트노미로 (0) | 2020.04.24 |