알고리즘/프로그래머스(C++)
[프로그래머스/알고리즘] 비밀지도
chaibin
2019. 2. 7. 19:57
입출력 예제
n : 5
arr1 : [9,20,28,18,11]
arr2 : [30,1,21,17,28]
return : ["#####","# # #","### #","# ##",'#####"]
문제해설
이번 문제를 풀려면 비트연산인 | 연산을 이용하면 바로 내가 원하는 값이 나오고 그것을 2진수로 바꾸는 과정을 이용해서 해결할 수 있습니다.
저는 string에 5개의 공간을 공백으로 만들고 2로 나누면서 나머지가 존재하면 뒤에서부터 #을 채우는 방식으로 2진수로 만들었습니다.
소스코드
#include <string> #include <vector> using namespace std; vector<string> solution(int n, vector<int> arr1, vector<int> arr2) { vector<string> answer(n); for (int i = 0; i < n; i++) { int k = arr1[i] | arr2[i]; answer[i].assign(" ",n); for (int j = n - 1; j >= 0; j--) { if (k % 2 == 0) answer[i][j] = ' '; else answer[i][j] = '#'; k /= 2; } } return answer; }