-
반응형
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; }
반응형'문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 하샤드 수 (0) 2021.06.19 [프로그래머스] 평균 구하기 (0) 2021.06.19 [프로그래머스] 이름이 있는 동물의 아이디 (0) 2021.06.13 [프로그래머스] 최대공약수와 최소공배수 (0) 2021.06.12 [프로그래머스] 소수 만들기 (0) 2021.06.07 댓글