programmers.co.kr/learn/courses/30/lessons/17681
<풀이>
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;
}
|
비트 연산자와 진법에 대해 알아볼 수 있는 문제였습니다.
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[C++] 프로그래머스 - 방금그곡 (0) | 2021.01.19 |
---|---|
[C++] 프로그래머스 - 다트 게임 (0) | 2021.01.16 |
[C++] 프로그래머스 - 캐시 (0) | 2021.01.11 |
[C++] 프로그래머스 - 프렌즈4블록 (0) | 2021.01.07 |
[C++] 프로그래머스 - 셔틀버스 (0) | 2021.01.04 |