오늘하루도 우힣ㅎ

비밀지도 - c++ (2018 2018 KAKAO BLIND RECRUITMENT) 본문

알고리즘/프로그래머스

비밀지도 - c++ (2018 2018 KAKAO BLIND RECRUITMENT)

우힣 2020. 4. 20. 17:47

해당 문제는 2018 카카오 블라인드 채용 코딩테스트에 있었던 문제이다. 간략하게 설명하자면 두개의 지도가 주어지고 두개의 지도를 겹쳐 공백인 곳과 공백이 아닌곳을 string 어레이(벡터)로 표현을 하는 것이다.

자세한 문제의 설명은 아래에 존재한다.

https://programmers.co.kr/learn/courses/30/lessons/17681

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이문제는 이진법을 통해 1은 # 0은 공백으로 표현하기를 바라는 문제이다. 따라서 이문제는 이진법을 이용하여 풀어야 한다. 이진법을 사용하여 풀때 유용한 비트 연산자를 생각해내니 이문제는 쉽게 풀리는 문제였다.

 

#include <string>
#include <vector>
#include <iostream>
#include <bitset>
#include <cmath>

using namespace std;

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;
    
    for(int i=0;i<n;i++){
    	//이진수에서 가장 앞비트 부터 확인을 시키기 위하여 standard를 n-1만큼 제곱시켜 주기
    	int standard = pow(2,n-1);
        //문제에서 이진수일때 두곳중 하나라도 1이면 #으로 표시되길 원하기 때문에 |연산자 사용
        int temp = arr1[i]|arr2[i];
        string answerLine="";
        
        for(int j=0;j<n;j++){
        	//standard의 경우 이진수에서 각각의 비트들을 확인하기 위함이다. 해당 부분이 1이면 #을 추가할수 있게 해준다.
        	if(temp&standard==1){
            	answerLine+="#";
            }
           	if(temp&standard==0){
            	answerLine+=" ";
            }
            //현재 standard에서 msb를 오른쪽으로 한칸 옮기기
            standard>>=1;
        }
        answer.push_back(answerLine);
    }
    
    return answer;
}
Comments