본문 바로가기

코딩 테스트/프로그래머스

[프로그래머스 Level 1, C++] [1차] 비밀지도

728x90
반응형

문제 : [1차] 비밀지도


풀이 방법

지도 두개를 겹치면 나오는 결과로 비밀지도를 풀어야 하는 컨셉의 문제이다.

지도 각 칸이 둘중 한 곳이라도 1이면 완성된 지도에서 1이 된다고 하는데 OR연산이 딱 맞다.

| 연산을 해서 int temp에 넣고 그것을 2진법으로 만든 다음 string str에 1이면 #을 넣고 0이면 공백을 넣으면 된다.

2진법을 계산한 결과를 거꾸로 만들어야해서 stack을 써봤다 stack의 넣은 순서 반대로 나와야 하는 성질을 이용했다.


소스 코드

#include <string>
#include <vector>
#include <stack>
using namespace std;

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;
    stack<char> s_str;
    
    for(int i=0; i<arr1.size(); i++) {
        int temp = arr1[i] | arr2[i];
        
        for(int u=0; u<n; u++) {
            if(temp % 2 == 1) {
                s_str.push('#');
            }
            else {
                s_str.push(' ');
            }
            temp /= 2;
        }
        
        answer.push_back("");
        while(!s_str.empty()){
            answer[i].push_back(s_str.top());
            s_str.pop();
        }
    }
    
    return answer;
}

 

728x90
반응형