Skip to content

Commit 4a40e33

Browse files
authored
Create PG_17681.java
[이해민] 꽉 자바 첫 주 프로그래머스 17681번
1 parent 9ba80a7 commit 4a40e33

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

src/week01/haemin/PG_17681.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
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

Comments
 (0)