[문제보기]
2018 KAKAO BLIND. 비밀 지도
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
[풀이방법]
vector bit 변수를 만들어서 arr1, arr2에 들어있는 숫자들을 2진수로 바꿔 map[][] 배열에 적용해주는 방식을 사용했다.
for문을 돌리기 시작할 때, bit.assign을 사용하여 n크기만큼 0으로 할당을 시켜준다.
그리고 tentotwo() 함수를 사용하여 2진수 변환을 시켜준다. 이때 vector bit으로 들어가는 순서는 반대로 들어가므로
이점을 유의해준다.
2진수 변환이 끝나면 map[][]배열에 bit가 1일 때 1을 넣어준다.
str2도 같은 방식으로 진행을 해주면, 문제에서 제시한 "지도 1", "지도 2"가 합쳐지게 된다.
마지막으로 map[][]배열을 검사해 1인 곳은 "벽(#)", 0인 곳은 "공백(" ")으로 처리해 vector answer에 저장하여
반환해준다.
[소스코드]
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int> bit;
void tentotwo(int num){
for(int i=0; num > 0; i++){
int b = num %2;
bit[i] = b;
num /= 2;
}
}
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
int map[16][16] = {0};
for(int i=0; i<n; i++){
bit.assign(n, 0);
tentotwo(arr1[i]);
int temp = n-1;
for(int k=0; k<n; k++){
if(bit[k] == 1){
map[i][temp] = 1;
}
temp--;
}
}
for(int i=0; i<n; i++){
bit.assign(n, 0);
tentotwo(arr2[i]);
int temp = n-1;
for(int k=0; k<n; k++){
if(bit[k] == 1){
map[i][temp] = 1;
}
temp--;
}
}
for(int i=0; i<n; i++){
string s;
for(int j=0; j<n; j++){
if(map[i][j] == 1){
s += "#";
}
else{
s += " ";
}
}
answer.push_back(s);
}
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 ret="";
//array돌면서 비트연산에서 둘 중 하나라도 1일 경우 # 추가, 아닐 경우 공백 추가
for(int j=n-1;j>=0;j--){
if(arr1[i]&(1<<j) || arr2[i]&(1<<j)) ret+='#';
else ret+=' ';
}
answer.push_back(ret);
}
return answer;
}
위의 코드는 다른 블로그를 참고한 코드이다. 문제를 풀고 나서 다른 사람들은 어떻게 풀었는지 확인을 해봤는데,
다들 2진수로 변환하여 map에 적용을 시키는 방법이 아닌, 비트 연산자를 사용하여 쉽게 구현을 했다.
그리고 Kakao Tech 홈페이지의 문제 해설에서 이 문제는 비트 연산자를 묻는 문제로 제시가 되어
필자는 정답으로 책정이 되었지만, 카카오에서 원하는 방법으로 문제를 안 풀었으므로 틀린 문제로 생각한다
[참고한 자료]
https://medium.com/@dltkddud4403/2018-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EB%B8%94%EB%9D%BC%EC%9D%B8%EB%93%9C-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%B9%84%EB%B0%80%EC%A7%80%EB%8F%84-a192fdae8ed
'알고리즘 스터디 > Programmers' 카테고리의 다른 글
[프로그래머스][C++] 2018 KAKAO BLIND. 방금 그 곡 (level 2) (0) | 2020.08.31 |
---|---|
[프로그래머스] 2018 KAKAO BLIND 캐시 (level 2) (0) | 2020.08.27 |
[프로그래머스][C+] 2018 KAKAO BLIND. 뉴스 클러스터링 (level 2) (0) | 2020.08.26 |
[프로그래머스][C+] 2018 KAKAO BLIND. 다트 게임 (level 1) (0) | 2020.08.26 |
[Programmers][C++] N으로 표현 ( level 3) (0) | 2020.07.31 |