|
| 1 | +class Solution { |
| 2 | + |
| 3 | + // 정수 값을 이진수 배열로 변환하는 함수 |
| 4 | + // value: 변환할 정수 |
| 5 | + // length: 결과 이진수 배열의 길이 (지도 가로 길이) |
| 6 | + private static int[] toBinary(int value, int length) { |
| 7 | + int[] answer = new int[length]; |
| 8 | + |
| 9 | + // 이진수는 뒤에서부터 채워야 하므로, 배열의 끝에서부터 채움 |
| 10 | + for (int i = 0; i < length; i++) { |
| 11 | + answer[length - i - 1] = value % 2; // 2로 나눈 나머지를 저장 (0 또는 1) |
| 12 | + value /= 2; // 다음 비트를 위해 2로 나눔 |
| 13 | + } |
| 14 | + |
| 15 | + return answer; |
| 16 | + } |
| 17 | + |
| 18 | + // 이진수 배열을 문자열로 변환하는 함수 |
| 19 | + // 0은 공백 ' ', 1은 벽 '#' |
| 20 | + private static String toString(int[] binary) { |
| 21 | + StringBuilder answer = new StringBuilder(); |
| 22 | + final char[] TILES = {' ', '#'}; // 매핑 테이블: 0 -> ' ', 1 -> '#' |
| 23 | + |
| 24 | + for (int bit : binary) { |
| 25 | + answer.append(TILES[bit]); // bit 값에 따라 문자 추가 |
| 26 | + } |
| 27 | + |
| 28 | + return answer.toString(); // 최종 문자열 반환 |
| 29 | + } |
| 30 | + |
| 31 | + // 메인 로직 함수 |
| 32 | + // n: 지도의 크기 (정사각형이므로 n x n) |
| 33 | + // arr1, arr2: 두 장의 지도를 나타내는 정수 배열 |
| 34 | + public String[] solution(int n, int[] arr1, int[] arr2) { |
| 35 | + String[] answer = new String[n]; // 정답 배열 (각 행의 문자열 저장) |
| 36 | + |
| 37 | + for (int row = 0; row < n; row++) { |
| 38 | + // 두 지도의 같은 위치를 OR 연산하여 겹치는 벽 찾기 |
| 39 | + int mergedRow = arr1[row] | arr2[row]; // 비트 OR 연산 |
| 40 | + |
| 41 | + // OR 연산 결과를 이진수 배열로 변환 후, 문자열로 변환 |
| 42 | + answer[row] = toString(toBinary(mergedRow, n)); |
| 43 | + } |
| 44 | + |
| 45 | + return answer; // 최종 지도 문자열 배열 반환 |
| 46 | + } |
| 47 | +} |
0 commit comments