Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- BOJ
- 안드로이드
- hackerrank
- Android
- setting
- Algorithm
- RAII
- 2019 카카오 개발자 겨울 인턴십
- utility
- 백트랙
- backtrack5
- modern C++
- 2018 KAKAO BLIND RECRUITMENT
- unique_ptr
Archives
- Today
- Total
K-D²
2018 KAKAO BLIND RECRUITMENT - 비밀지도 본문
문제 링크 : programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
문제 풀이
두 정수 벡터에서 각각의 인덱스에 위치한 정수를 OR연산하고 이진수로 나타냈을 때 1로 표시되는 위치를 #으로 출력하고, 0으로 표시되는 위치를 공백으로 출력하는 문제이다.
즉, arr1[idx] | arr2[idx] 의 값을 이진수로 생각하고 각 비트가 위치한 자리를 구하기 위한 방법으로 비트 마스킹을 생각해볼 수 있다.
두 배열의 각각 i번째 원소를 이진수로 생각하고 j번째 위치가 0인지 아닌지를 판별하면 된다.
둘 중 어느 하나가 0이 아니라면 '#'을 추가하고, 그 이외의 경우(0인 경우)에는 ' ' 공백을 추가한다.
(0이 아니면 이진법으로 생각했을 때 해당 위치에 1이 있는 것이고, 0이면 0이 있는 것이다.)
이때 $2^0$을 의미하는 0번째 위치인 LSB(최하위 비트)가 제일 우측이므로 n - 1번째부터 0번째 위치를 판별해가면서 answer 배열에 문자를 추가하면 된다.
이 과정을 코드로 나타내면 아래와 같다.
소스 코드
#include <string>
#include <vector>
using namespace std;
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer(n);
for (int i = 0; i < n; ++i) {
for (int j = n - 1; j >= 0; --j) {
answer[i] += ((arr1[i] & (1 << j)) | (arr2[i] & (1 << j))) != 0 ? '#' : ' ';
}
}
return answer;
}
'Algorithm > Programmers' 카테고리의 다른 글
2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임 (0) | 2020.12.24 |
---|
Comments