본문 바로가기

code/programmers

2018 카카오 블라인드 테스트 1번

문제 링크:

 

카카오 신입 공채 1차 코딩 테스트 문제 해설

‘블라인드’ 전형으로 실시되어 시작부터 엄청난 화제를 몰고 온 카카오 개발 신입 공채. 그 첫 번째 관문인 1차 코딩 테스트가 지난 9월 16일(토) 오후 2시부터 7시까지 장장 5시간 동안 온라인으로 치러졌습니다. 지원자들의 개발 능력을 잘 검증하기 위해 출제 위원들이 한 땀 한 땀 독창적이고 다양한 문제들을 만들어 냈고 문제에 이상은 없는지, 테스트케이스는 정확한지 풀어보고 또 풀어보며 […]

tech.kakao.com

 

입력1:

5
9 20 28 18 11
30 1 21 17 28

입력2:

6
46 33 33 22 31 50
27 56 19 14 14 10

출력1:

#####
# # #
### #
#  ##
#####

출력2:

######
###  #
##  ##
 #### 
 #####
### # 

코드1:

#include <iostream>
#include <string>

using namespace std;

int n;
int arr1[16], arr2[16];
bool map1[16][16], map2[16][16];

void dec_to_bin(int arr[], bool map[][16]) {
	for (int i = 0; i < n; ++i) {
		int j = n - 1;
		for (int b = arr[i]; b; b = b >> 1) {	
			map[i][j--] = b % 2;
		}
	}
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> n;

	for (int i = 0; i < n; ++i)
		cin >> arr1[i];

	for (int i = 0; i < n; ++i)
		cin >> arr2[i];
	
	dec_to_bin(arr1, map1);
	dec_to_bin(arr2, map2);

	string ans;
	for (int i = 0; i < n; ++i) {
		ans.clear();
		for (int j = 0; j < n; ++j) {
			ans += (map1[i][j] || map2[i][j]) ? '#' : ' ';
		}
		cout << ans << '\n';
	}

	return 0;
}

비트연산을 물어보는 문제라고 한다.

이진법으로 전환할 필요가 없었다...

 

코드2:

#include <iostream>
#include <string>

using namespace std;

int n;
int arr1[16], arr2[16];

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> n;

	for (int i = 0; i < n; ++i)
		cin >> arr1[i];

	for (int i = 0; i < n; ++i)
		cin >> arr2[i];
	
	string ans;
	for (int i = 0; i < n; ++i) {
		ans.clear();
		int res = arr1[i] | arr2[i];
		for (int j = 1 << n - 1; j; j = j >> 1) {
			ans += (res & j) ? '#' : ' ';
		}
		cout << ans << '\n';
	}

	return 0;
}