본문 바로가기
IT & 개발/알고리즘

2018 카카오 코테 비밀지도

by 매직아일랜드 2021. 9. 11.

#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;
}