
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/17681
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
n개의 2진수를 변환했을때 0이면 공백, 1이면 #으로 암호화 되어있는 지도를 2개 겹쳐서 최종 지도를 획득하는 문제
이때 하나라도 벽이면 벽임
문제 풀이법
처음에 내가 푼 풀이법은 2진수로 변환하고, 그 수를 reverse한 후 임시 배열에 값을 저장한 후, 다른 지도도 검사하는 방식으로 문제를 해결했다
답은 맞았지만 여러 풀이를 참고하던 중 비트 연산자를 사용하는 풀이를 발견했다
비트 연산자를 사용하는 풀이라고 하니 or연산자를 사용하면 되는 것을 알 수 있었다
왜 혼자서는 생각하지 못했던거지....
뿐만 아니라 2진수를 구하는 과정에서 맨 뒷자리 부터 구해지기에 reverse함수를 썼지만, 이 풀이에서는 단순히 값을 넣는 과정에서 reverse 처리를 하였다
- reverse를 사용한 후의 코드 : str += ' ';
- reverse를 사용하지 않는 코드 : str = ' ' + str;
이런식이면 뒤에서부터 글을 채워 나갈 수 있다
비트 연산자를 좀 더 활용할 수 있도록 문제를 풀 때 항상 염두해야겠다
소스 코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> get_2(int num, int n)
{
vector<int> v;
while (num >= 2)
{
v.push_back(num % 2);
num /= 2;
}
v.push_back(num);
if (v.size() != n)
{
int cnt = n - v.size();
for (int i = 0; i < cnt; i++)
v.push_back(0);
}
reverse(v.begin(), v.end());
return v;
}
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
int arr[n][n];
for (int i = 0; i < n; i++)
{
vector<int> v = get_2(arr1[i], n);
for(int j = 0; j < n; j++)
{
arr[i][j] = v[j];
}
}
for (int i = 0; i < n; i++)
{
vector<int> v = get_2(arr2[i], n);
for(int j = 0; j < n; j++)
{
if (arr[i][j] == 0)
arr[i][j] = v[j];
}
}
for (int i = 0; i < n; i++)
{
string str;
for (int j = 0; j < n; j++)
{
if (arr[i][j] == 0)
str += ' ';
else
str += '#';
}
answer.push_back(str);
}
return answer;
}
비트연산자를 사용한 풀이
#include <string>
#include <vector>
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 str;
arr1[i] = arr1[i] | arr2[i];
for (int j = 0; j < n; j++)
{
if (arr1[i] % 2 == 0)
str = ' ' + str;
else
str = '#' + str;
arr1[i] = arr1[i] >> 1;
}
answer.push_back(str);
}
return answer;
}
'Algorithm Study' 카테고리의 다른 글
[백준] 10808 알파벳 개수 (0) | 2023.01.06 |
---|---|
[프로그래머스] 1단계 - 문자열 내 마음대로 정렬하기 (0) | 2023.01.05 |
[프로그래머스] 1단계 - 예산 (0) | 2023.01.05 |
[프로그래머스] 1단계 - 3진법 뒤집기 (0) | 2023.01.04 |
[백준] 17413 단어 뒤집기 2 (0) | 2023.01.03 |