Algorithm/Programmers(c++)
[c++][프로그래머스] [1차] 비밀지도
kim-hasa
2021. 7. 30. 14:40
https://programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
비밀지도를 해독하는 문제입니다.
1. 숫자를 2진수로 변경해가면서 두 수중에 하나라도 자리수가 1이라면 1을 넣습니다.
2. 2진수가 반대로 들어가있으므로, 반대로 돌려서 출력합니다.
-> 출력하면서 1이라면 #, 0이라면 공백을 더해서 출력합니다.
처음에는 되게 문제 풀이에 감이 오지 않았는데, 한번 써보자! 하고 푸니까 쉽게 풀린 문제였습니다.
#include <string>
#include <vector>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
int map[16][16] = {0}; // 최대 2차원 배열 0으로 초기화
int count = 0; // 가로 index를 위한 변수
for(int i=0; i<n; i++)
{
int a = arr1[i];
int b = arr2[i]; // arr1, arr2의 숫자를 받아오는 변수
while(a > 1 || b > 1) // 2진수로 변경
{
int a2 = a % 2;
int b2 = b % 2;
if(a2 == 1 || b2 == 1) // 나머지가 1이면 체크
{
map[i][count] = 1;
}
a = a/2;
b = b/2;
count++;
}
if(a == 1 || b == 1) // 마지막 숫자 체크
{
map[i][count] = 1;
}
count = 0;
}
for(int i=0; i<n; i++) // 문자로 변경
{
string str="";
for(int j=n-1; j>=0; j--) // 2진수가 반대로 들어가 있어서 뒤에서부터 체크
{
if(map[i][j] == 1) // 1이라면 문자 #
{
str += '#';
}
else if(map[i][j] == 0) // 0이라면 공백
{
str += ' ';
}
}
answer.push_back(str);
}
return answer;
}
※ 코드가 지저분할 수 있습니다.