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에서 모두 공백인 부분은 전체 지도에서 공백.