문제풀이/프로그래머스
[프로그래머스] [1차] 비밀지도
Hyeon-Uk
2021. 6. 19. 21:23
반응형
https://programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
-풀이-
먼저, 두 비밀지도의 각 행끼리 or연산을 해준 값을 구한 뒤, 2로 나누면서 0이면 " "을, 1이면 "#"을 str의 뒤에 추가를 해준다. 단, str의 길이가 n이 아니라면, str의 앞에 사이즈가 n이될때까지 " "를 추가해준다
ex)
arr1[0]=9, arr2[0]=30 일때, or연산을 하면 31이 된다.
63을 2진수로 바꾸면, 11111이 되므로, answer에 "#####"을 push,
arr1[1]=20, arr2[1]=1 이므로, or연산을 하면 21이 된다.
21을 2진수로 바꾸면, 10101이 되므로 answer에 "# # #"을 push,
만약 or연산을 한 값을 2진수로 바꿨을때, 1111과 같이, n의 자리를 만족하지 못하면, 앞에 공백을 추가하여 n의 자리를 맞춘 " ####"을 push
-시간복잡도-
arr1의 크기를 N이라고 한다면, O(N)
-코드-
#include <string>
#include <vector>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
vector<int> arr3;
for(int i=0;i<arr1.size();i++){
int now=arr1[i]|arr2[i];
string str="";
while(now>0){
str=(now%2==0?" ":"#")+str;
now/=2;
}
if(str.size()!=n){
while(str.size()<n){
str=" "+str;
}
}
answer.push_back(str);
}
return answer;
}
반응형