(C++) Programmers: [1차] 비밀지도

고현서·2023년 1월 14일
1

Algorithm

목록 보기
4/6

문제 링크

  • 해당 문제는 간단히 arr1과 arr2의 각 수를 2진수로 변환 후 해당 두 수를 OR연산을 해주면 된다.
    2진수로 변환하는데에 Shift 연산을 이용했다.

변수값은 저장할 시 2진수로 저장된다는 점을 이용하여 n비트에서 2진수 변환을 위해 Shift 연산을 활용하여 1비트씩 감소하면서 해당 비트값과 1과의 AND연산을 통한 2진수 결과값을 알 수 있다.

n비트 중에 한 비트씩 Shift(이동) 하여 연산하기 때문에 2진수의 각 자릿수의 숫자를 알 수 있다.

이 점을 이용하여 arr1과 arr2를 비트들의 Shift연산을 통해 각 자릿수의 OR연산의 결과값이 1이면 #을 넣고 아니면 공백을 넣도록 해주었다.

최종코드

#include <string>
#include <vector>

using namespace std;

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
	vector<string> answer;
	string str = "";
	for (int i = 0; i < n; i++) {
		string ans = "";
		for (int j = n - 1; j >= 0; j--) {
			ans += ((arr1[i] >> j) & 1) || ((arr2[i] >> j) & 1) == 1 ? "#" : " ";
		}
		answer.push_back(ans);
	}
	return answer;
}

Reference.

10진수를 2진수로, 이진법 변환

profile
New 현또의 코딩세상 / Unity 개발자

0개의 댓글