티스토리 뷰

반응형

프로도의 비상금 위치를 알기 위해서...

비밀지도의 암호를 푸는 문제

 


문제의 조건

 

1. 정사각형 지도의 한 변의 길이 n,

지도 1의 암호 배열 arr1,

지도 2의 암호 배열 arr2가 주어짐

 

2. 각 지도 배열에는 n개의 정수가 들어있는데 

암호화된 숫자임

저걸 2진수로 바꿔야 진짜 지도 그림을 알 수 있음

arr1[i]의 원소 하나를 2진수로 바꾸면 00101과 같은 숫자를 얻을 수 있는데

0은 빈 공간(" ")이고 1은 벽("#")이다. 

 

3. 지도 2개를 합쳐야 진짜 보물지도를 얻을 수 있는데

두개를 합쳤을 때 하나라도 1이면 벽("#")이고

둘 다 0이면 빈 공간(" ")이다. 

 

4. 비밀지도를 해독해서 "  # #" 등과 같은 문자열 형식으로 배열에 저장한 후 리턴 

 


#include <string>
#include <vector>
#include <stack>

using namespace std;

stack<int> GetBinary(int n, int size)
{
    stack<int> result;

    while (0 < n)
    {
        result.push(n % 2);
        n /= 2;
    }

    //만약 00001같은 경우에는 1만 push하고 멈추기 때문에 실제 size보다 모자란만큼 0을 채워줌 
    while (size > result.size())
        result.push(0);

    return result;
}

vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;
    for (int i = 0; arr1.size() > i; i++)
    {
        stack<int> st1 = GetBinary(arr1[i], n);
        stack<int> st2 = GetBinary(arr2[i], n);
        string solve = "";
        while (!st1.empty())
        {
            int n1 = st1.top();
            int n2 = st2.top();
            if (1 == n1 || 1 == n2)
                solve += "#";
            else if (0 == n1 && 0 == n2)
                solve += " ";

            st1.pop();
            st2.pop();
        }
        answer.emplace_back(solve);
    }

    return answer;
}

 

처음에 이상하게 자꾸 10초 이상 걸린다며 스톱되었는데

알고보니 2진수로 바꾸는 함수를 잘못 작성해서 무한루프가 돌고 있었다...ㅎ

앞으로 조심하장...

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함