비트마스킹을 이용하면 아주 간단히 풀 수 있는 문제랍니다.
비트마스킹 연습합시다!!
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for(int i = 0; i < n; i++) {
answer[i] = String.format("%" + n + "s", toBinary(arr1[i] | arr2[i]));
}
return answer;
}
public String toBinary(int num) {
StringBuilder sb = new StringBuilder();
while(num > 0) {
sb.append((num & 1) == 1 ? '#' : ' ');
num = num >> 1;
}
return sb.reverse().toString();
}
}
아아주 간단합니다.
두 지도를 겹치는데, 둘 중 하나라도 벽인 부분은 전체 지도에서도 벽이다 -> |(or) 연산을 사용하면 됩니다.!!
그럼 십진수로 된 새로운 지도를 구했습니다. 얘를 " ### #" 요런 식으로 바꾸어 주어야 겠죠. 이것도 비트마스킹을 사용했습니다.
(num & 1) 의 값을 보고 홀수인지 짝수인지 판별할 수 있겠죠. 그럼 이걸로 이진수도 만들어 낼 수가 있습니당.
근디 요렇게 나누면 지도 모양 반대가 되겠죵. 또한 지도는 n * n 의 크기를 갖고 있기 때문에 reverse()하고 왼쪽에다가 패딩을 주면 됩니다!!
작년에 맨 처음 풀었을 때는 눈물의 똥꼬쑈를 했었는데....
비트마스킹 연습합시다!!!
* 참고: Integer.toBinaryString(int i) 라는 메소드가 있네여^^;;; 짱이네 진짜
'Algorithm > Programmers' 카테고리의 다른 글
[2018 KAKAO BLIND RECRUITMENT][구현/문자열 처리] 방금그곡 - Java (0) | 2020.12.03 |
---|---|
[2018 KAKAO BLIND RECRUITMENT][문자열 처리] 다트 게임 - Java (0) | 2020.12.03 |
[2018 KAKAO BLIND RECRUITMENT][구현] 캐시 - Java (0) | 2020.12.02 |
[2018 KAKAO BLIND RECRUITMENT][구현] 프렌즈4블록 - Java (0) | 2020.12.01 |
[2018 KAKAO BLIND RECRUITMENT][구현] 셔틀버스 - Java (0) | 2020.11.30 |