알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!
이 문제는 가로, 세로 길이가 n인 정사각배열에
arr1, arr2 안 값을 2진법으로 변환하여 넣고
비트연산 or(||) 연산자를 활용하여 같은 위치에 하나라도 1이면 1을 반환하도록 연산,
연산 결과를 1은 #
으로, 0은 (공백)
으로 출력하는 문제이다.
import java.util.ArrayList;
import java.util.List;
public class Solution {
public static void main(String[] args) {
int n = 5;
int[] arr1 = {9, 20, 28, 18, 11};
int[] arr2 = {30, 1, 21, 17, 28};
System.out.println(solution(n,arr1, arr2).toString());
}
public static List<String> solution(int n, int[] arr1, int[] arr2) {
List<String> list1 = toBinary(n, arr1);
List<String> list2 = toBinary(n, arr2);
List<String> answer = new ArrayList<>();
for(int i = 0; i < n; i++) {
StringBuilder sb = new StringBuilder();
String s1 = list1.get(i);
String s2 = list2.get(i);
for(int j = 0; j < n; j++) {
if(s1.charAt(j) == '1' | s2.charAt(j) == '1') {
sb.append("#");
}else {
sb.append(" ");
}
}
answer.add(sb.toString());
}
return answer;
}
//2진수로 변환하는 메소드
private static List<String> toBinary(int n, int[] arr) {
List<String> binary = new ArrayList<>();
for(int i = 0; i < n; i++) {
StringBuilder sb = new StringBuilder();
int share = arr[i];
while(share > 0) {
int remain = share % 2;
share /= 2;
sb.append(remain);
}
while(sb.toString().length() < n) { // 자릿수 채우도록 0 붙여줌
sb.append("0");
}
binary.add(sb.reverse().toString()); //거꾸로 붙여서 뒤집음
}
return binary;
}
}
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] = Integer.toBinaryString(arr1[i] | arr2[i]);
answer[i] = String.format("%"+n+"s", answer[i]);
answer[i] = answer[i].replaceAll("[1]", "#");
answer[i] = answer[i].replaceAll("[0]", " ");
}
return answer;
}
}