[프로그래머스] 비밀지도



Programmers - [2018 KAKAO BLINE RECRUITMENT] 비밀지도




사용 언어 - C++

소요 시간 - 32분

정답 여부 - O




문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17681



문제 요약

  1. 10진수로 이루어진 배열 2개가 주어짐
  2. 해당 배열 2개의 원소를 모두 2진수로 변환
  3. 각각 1에는 #, 0 에는 공백으로 채운 후, 두 지도를 합침
  4. 해당 지도를 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;
}




트러블 슈팅

  1. 두뇌 회전 이슈로 vector arr을 선언하여 arr[1]에 arr1[1] | arr2[i]를 대입하는 문제 → arr[i] /= 2 를 하면서 문제 발생 → int temp로 변경
  2. row가 뒤집히는 문제 발생 → reverse 함수로 row를 반전




문제 풀이 후 소감

  • 크게 어렵지는 않았지만 조금 더 고민을 잘 해봐야겠다