programming language/Algorithm

[카카오 신입 공채 1차 코딩 테스트 문제] 비밀지도

jellylucy 2021. 7. 21. 13:32

문제

입출력

문제풀이

(1) 하나의 배열 값을 만들기

- 입력받은 정수배열 순서대로 OR 연산 하기

- arr1에 arr1과 arr2의 OR연산값을 넣었다.

(2) OR연산값 십진수를 이진수로 변환하여 출력하기

- arr1 % 2 를 통해 이진수로 변환하기

- string tmp에 stl push_back을 이용해서 값 넣기

- 한번의 계산 뒤, arr1 = arr1/2으로 계산반복

- 입출력 조건에서 이진수 자리가 n이므로 while( tmp.size() != n)까지 반복하기

- 이진수 값은 계산 순서의 반대이므로 <algorithm> reverse함수 이용해 순서 바꾸기

 

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>//reverse함수 이용
using namespace std;
//(1) 각 원소들을 이진수로 변환해서 비교한다. 
//(2) 비교에서 하나라도 1이면 1이다. 
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
    vector<string> answer;
    for(int i = 0;i<n;i++){//한 줄씩 결과를 만든다.
        arr1[i] = arr1[i] | arr2[i];// OR연산자를 이용해서 결과를 arr1에 저장한다.
        string tmp = "";
        while(tmp.size() != n){//각 원소를 이진수로 변환했을 때 길이는 n이하여야한다. 
        if(arr1[i] % 2 == 0)
            tmp.push_back(' ');//string::push_back 이용한다
        else
            tmp.push_back('#');
        arr1[i] = arr1[i]/2;//계산 한번 한뒤 2로 나눈 몫으로 저장한 뒤 다시 계산한다.
        }
        reverse(tmp.begin(), tmp.end());//계산순서와 반대로 이진법 결과가 나오므로. <algorithm>의 str.reverse함수이용한다
        answer.push_back(tmp);//vector::push_back
    }

    return answer;
}
//비밀지도는 숫자로 암호화.
//지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체지도에서 벽이다. 
//지도 1과 지도2에서 모두 공백인 부분은 전체 지도에서 공백.