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

 

코딩테스트 연습 - [1차] 비밀지도

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다

programmers.co.kr

<풀이>

1. 두 개의 지도를 합쳐서 지도를 해독한다.

2. 해독한 지도를 반환한다.

 

<해법>

1. 지도를 합치는 방법

=> 저는 비트 연산자를 이용하였습니다. 주어지는 지도가 결국 2진수로 바꿔서 생각해야하는 걸 보면, 바꾸지 않고 비트연산자로 해결해야 겠다는 아이디어를 얻을 수 있었습니다.

 

2. 해독한 지도를 옮기는 방법

=> 비트 연산자를 통해 해독한 지도의 한 줄(10진수)을 알 수 있습니다. 이 숫자를 '#'과 ' '으로 나타내기 위해서는 2진수로 바꿔야 합니다. 따라서, 해당 숫자를 2로 계속 나누어서 '#'과 ' '을 구분하였습니다.

 

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
32
33
34
35
36
37
#include <iostream>
#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++) {
 
        //각 라인 숫자 OR(비트 연산자)로 구하기
        int line = arr1[i] | arr2[i];
 
        string str = "";
 
        //10진법 -> 2진법으로 바꾸기
        for (int j = 0; j < n; j++) {
 
            if (line % 2 == 1) {
                str = "#" + str;
            }
            else {
                str = " " + str;
            }
 
            line = line / 2;
        }
 
        //결과 갱신
        answer.push_back(str);
    }
 
    //결과 반환
    return answer;
}
 

 

비트 연산자와 진법에 대해 알아볼 수 있는 문제였습니다.

+ Recent posts