프로그래머스의 비밀지도(Lv1) 문제이다.
[ 문제풀이 ]
2개의 맵을 합쳐서 새로운 하나의 맵을 완성해야 하는 문제이다.
맵을 만드는 과정부터 정답을 도출하는 과정까지 순차적으로 알아보자.
#1. 맵 만들기
본인은 주어진 10진수 숫자를 2진수로 바꿔서 공백부분을 0, 벽을 1로 가지는 맵을 만들어 주었다.
맵으로 만들어 주는 과정은 다음과 같다.
1. 주어진 10진수 숫자를 2진수로 변환한다. 이 때, 변환된 2진수는 string형태로 저장을 해준다.
2. 변환 과정에서 0은 공백으로, 1은 '#'으로 표현해서 문자열을 저장해준다.
3. 남은 칸 만큼 앞을 공백으로 채워준다.
1, 2번 과정은 크게 어려운 점이 없는데 3번 과정에 대해서 이야기를 해보자.
맵의 크기가 '5'이고 주어진 10진수 숫자로 '9'가 주어졌다고 가정해보자.
이 때, 과정 1 , 2를 진행해보자.
9를 2진수로 변환하게 되면 '1001(2)' 이 되고, 이를 공백과 '#'을 이용해서 표현하면 '# #' 이 된다.
그런데 문제는 맵의 크기가 '5'라는 것이다. 맵의 크기는 '5'인데 우리가 변환한 2진수는 길이가 4인 string이 되는 것이다.
이를 크기가 5인 맵에 집어넣으려면 ' # #' 과 같이 앞에 공백을 한칸 더 넣어주어야 한다.
즉 ! 01001(2) 로 표현하는 것이다. 따라서, 맵의 크기와 2진수로 바꾼 문자열의 길이를 비교해서 부족한 칸 수 만큼 앞에 공백을 추가적으로 넣어주어야 한다.
이렇게 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string Convert_To_Binary(int n, int Num)
{
string Result = "";
while (Num > 0)
{
int Temp = Num % 2;
if (Temp == 1) Result += '#';
else Result += ' ';
Num /= 2;
}
string R_Value = "";
for (int i = 0; i < n - Result.length(); i++) R_Value += ' ';
reverse(Result.begin(), Result.end());
R_Value += Result;
return R_Value;
}
vector<string> solution(int n, vector<int> arr1, vector<int> arr2)
{
vector<string> answer;
vector<vector<char>> MAP1(n, vector<char>(n));
vector<vector<char>> MAP2(n, vector<char>(n));
int Idx = 0;
for (int i = 0; i < arr1.size(); i++)
{
int Num = arr1[i];
string Binary_Num = Convert_To_Binary(n, Num);
for (int j = 0; j < n; j++) MAP1[Idx][j] = Binary_Num[j];
Idx++;
}
Idx = 0;
for (int i = 0; i < arr2.size(); i++)
{
int Num = arr2[i];
string Binary_Num = Convert_To_Binary(n, Num);
for (int j = 0; j < n; j++) MAP2[Idx][j] = Binary_Num[j];
Idx++;
}
for (int i = 0; i < n; i++)
{
string Result = "";
for (int j = 0; j < n; j++)
{
if (MAP1[i][j] == ' ' && MAP2[i][j] == ' ') Result += ' ';
else Result += '#';
}
answer.push_back(Result);
}
return answer;
}
|
cs |
'[ Programmers Code ] > # PG - Level1' 카테고리의 다른 글
[ 프로그래머스 다트게임 (Lv1) ] (C++) (0) | 2021.04.05 |
---|---|
[ 프로그래머스 실패율 (Lv1) ] (C++) (4) | 2021.03.30 |
[ 프로그래머스 키패드 누르기 (Lv1) ] (C++) (0) | 2021.03.28 |
[ 프로그래머스 크레인 인형뽑기 게임 (Lv1) ] (C++) (1) | 2021.03.12 |
[ 프로그래머스 신규 아이디 추천 (Lv1) ] (C++) (0) | 2021.01.29 |