#1 비밀지도 문제 링크
2018 카카오 신입 공채 코딩테스트 1번 문제는 아래 링크를 통해 풀어보실 수 있습니다.
https://programmers.co.kr/learn/courses/30/lessons/17681
#2 핵심 아이디어
비트연산자를 활용하여, OR 연산으로 통해 벽을 구한다.
처음 이 문제를 접했을 때, 각각의 배열을 2진수로 변경한 후, OR 연산을 하고자 생각하였다. (2번 변환)
하지만, OR 연산을 먼저 수행한 후 2진수로 한번 변경하는 것이 더 효율적이다. (1번 변환)
>>(shift연산)을 사용하여 2진수로 변환한다.
2진수로 변환할려면 재귀 또는 문자열 뒤집기로 변환하려고 했다.
더 간단한 방법 : >>1을 활용하여, 2로 나눈 나머지를 한자리씩 뒤로 쉬프트한다.
#3 최종 코드
#include <string>
#include <vector>
using namespace std;
vector<string> solution(int n, vector<int> arr1,vector<int> arr2) {
vector<string> answer;
for(int i=0;i<n;i++){
arr1[i] = arr1[i]|arr2[i];
string ans = "";
for(int j=0;j<n;j++){
if(arr1[i]%2==0) ans = " " + ans;
else ans = "#" + ans;
arr1[i] = arr1[i]>>1;
}
answer.push_back(ans);
}
return answer;
}
'IT & 개발 > 알고리즘' 카테고리의 다른 글
C++ 문자열 자르기 (istringstream&getline / strtok 함수) (0) | 2021.09.13 |
---|