public class 비밀지도 {
public static String[] solution(int n, int[] arr1, int[] arr2) {
String[] a = new String[n];
for(int i=0;i<n;i++){
a[i] = Integer.toBinaryString(arr1[i]|arr2[i]); //❓
a[i] = String.format("%" + n + "s", answer[i]); //❓
a[i] = a[i].replace("0"," "); //❓
a[i]= a[i].replace("1","#");
}
return a;
}
public static void main(String[] args) {
//케이스1
int n1 = 5;
int [] arr1 = {9, 20, 28, 18, 11};
int [] arr2 = {30, 1, 21, 17, 28};
//케이스2
int n2 = 6;
int [] arr3 = {46, 33, 33 ,22, 31, 50};
int [] arr4 = {27 ,56, 19, 14, 14, 10};
//케이스1 "#####","# # #", "### #", "# ##", "#####"
//케이스2 "######", "### #", "## ##", " #### ", " #####", "### # "
//for(String i: solution(n,arr1,arr2)) //케이스1
for(String i: solution(n,arr3,arr4)) //케이스2
System.out.println(i);
}
}
- Integer.toBinaryString(십진수);
int타입인 십진수를 string타입의 이진수로 바꾸어준다.
- String.format("%" + n + "s", 문자열);
위의 코드에서 이진수의 앞자리가 0일때 소실되지 않게끔 자릿수를 정해주는 역할.
n=6이여서 %6s를 의미(문자열 길이가 6) 이외에 %d %c 등등 다양하게 사용 가능
- 멤버.replace("교체전 문자열", "교체후 문자열");
위의 코드에서 1을 #으로 바꾸고 0을 공백으로 바꾸어주는 역할
- 비트연산
| : 하나라도 1이면 1
& : 둘 다 1이면 1
십진수에서 사용해도 됨
ex) System.out.print( 4 | 9 ); // 13
// 0100 1001 -> 1101
format함수를 몰라서 이렇게 하였음.
import java.util.*;
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
int [] arr = new int[n]; //비트연산저장
String[] answer = new String[n];
Stack<Integer> stack = new Stack<>();
for(int i=0;i<n;i++){
//비트연산
arr[i] = arr1[i] | arr2[i];
//이진수로 바꾸기
for(int j=0;j<n;j++){
stack.push(arr[i]%2);
arr[i] /= 2;
}
answer[i] = Integer.toString(stack.pop()); //❓
while(!stack.empty()) answer[i] += Integer.toString(stack.pop());
//#로 바꾸기
answer[i] = answer[i].replace("1","#");
answer[i] = answer[i].replace("0"," ");
}
return answer;
}
}
answer[i] = Integer.toString(stack.pop());
Stack을 사용하였는데 pop하는 부분에서 처음부터 += 할 경우 null값이 그대로 존재하기 때문에 할당(= 를) 해주어야 한다.
while(!stack.empty())
stack에 존재하는 값들을 모두 pop 하기 위해 for(i=0;i<stack.size();i++) 를 사용하였을 때는 안돼서 empty()함수를 사용하였다.