[프로그래머스] 비밀지도
Programmers - [2018 KAKAO BLINE RECRUITMENT] 비밀지도
사용 언어 - C++
소요 시간 - 32분
정답 여부 - O
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17681
문제 요약
- 10진수로 이루어진 배열 2개가 주어짐
- 해당 배열 2개의 원소를 모두 2진수로 변환
- 각각 1에는 #, 0 에는 공백으로 채운 후, 두 지도를 합침
- 해당 지도를 return
ex)
{9, 20, 28, 18, 11} → {01001, 10100, 11100, 10010, 01011}
{30, 1, 21, 17, 28} → {11110, 00001, 10101, 10001, 11100}
보기 편하도록 #을 ⭐로, 공백을 ❤️로 변경
1.
❤️⭐❤️❤️⭐
⭐❤️⭐❤️❤️
⭐⭐⭐❤️❤️
⭐❤️❤️⭐❤️
❤️⭐❤️⭐⭐
2.
⭐⭐⭐⭐❤️
❤️❤️❤️❤️⭐
⭐❤️⭐❤️⭐
⭐❤️❤️❤️⭐
⭐⭐⭐❤️❤️
1 + 2.
⭐⭐⭐⭐⭐
⭐❤️⭐❤️⭐
⭐⭐⭐❤️⭐
⭐❤️❤️⭐⭐
⭐⭐⭐⭐⭐
최종 코드
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
for(int i = 0; i < n; i++)
{
string row = "";
int temp;
temp = arr1[i] | arr2[i];
while(row.size() < n)
{
if(temp % 2 == 0)
row.push_back(' ');
else
row.push_back('#');
temp /= 2;
}
reverse(row.begin(), row.end());
answer.push_back(row);
}
return answer;
}
트러블 슈팅
- 두뇌 회전 이슈로 vector
arr을 선언하여 arr[1]에 arr1[1] | arr2[i]를 대입하는 문제 → arr[i] /= 2 를 하면서 문제 발생 → int temp로 변경 - row가 뒤집히는 문제 발생 → reverse 함수로 row를 반전
문제 풀이 후 소감
- 크게 어렵지는 않았지만 조금 더 고민을 잘 해봐야겠다