프로그래밍/코딩테스트

코딩테스트 : [1차] 비밀지도

백사니 2025. 4. 17. 08:44
728x90
반응형

문제 설명

해당 문제는 두 개의 정수 배열을 이진수로 해석해 겹쳐진 비밀지도를 해독하는 문제이다.

지도는 정사각형 형태이며, 두 지도의 각 줄을 OR 연산한 결과를 통해 벽(#) 또는 공백( )을 판단한다. 이때 OR 연산의 결과가 1인 경우 벽으로, 0인 경우 공백으로 처리한다.

 

핵심 아이디어

비트 연산 OR을 활용해 벽이 하나라도 존재하면 벽으로 표시

이진수로 변환 후, 1이면 '#', 0이면 ' '으로 변환

자릿수 맞추기: 항상 n자리로 표현되도록 한다.

 

#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++) // 각 행마다 처리
    {
        string row = ""; // 현재 행의 결과를 저장할 문자열
        int line = arr1[i] | arr2[i]; // 두 지도에서 OR 연산 수행 (벽이 하나라도 있으면 벽)

        for(int j = 0; j < n; j++) // 오른쪽부터 한 비트씩 확인
        {
            // 맨 끝 비트를 확인하여 1이면 벽, 0이면 공백을 추가
            row = ((line & 1) ? "#" : " ") + row;
            line = line >> 1; // 다음 비트를 보기 위해 오른쪽으로 쉬프트
        }

        answer.push_back(row); // 완성된 한 줄을 결과 벡터에 추가
    }
    
    return answer; // 최종 지도 반환
}
728x90
반응형