N
숫자로 구성된 문자열 | 1 ~ 16
arr1, arr2
N*N의 맵에서 같은 행의 값들을 벽이면 1, 없으면 0으로 치환했을 때 나오는 값을 2진수라 가정하고 이를 십진수로 변환한 값들의 집합
=> arr1 배열과 arr2 배열에서 하나라도 벽("#")이면 벽으로, 모두 공백(" ")이면 공백으로 취급하여 만들어진 배열을 "#"과 " "으로 이루어지도록 출력
한곳이라도 벽이면 벽, 둘다 공백이면 공백으로 해독 => OR 연산
class Solution {
public String[] solution(int N, int[] arr1, int[] arr2) {
String[] answer = new String[N];
for(int n=0; n<N; n++){
answer[n] = Integer.toBinaryString(arr1[n] | arr2[n]).replace("1","#").replace("0"," ");
}
return answer;
}
}
=> 이진수로 변환했을 때 N의 자리수보다 작으면 padding값을 채워주어야 하는데 이를 고려하지 못했습니다.
class Solution {
public String[] solution(int N, int[] arr1, int[] arr2) {
String[] answer = new String[N];
for(int n=0; n<N; n++){
String binary_str = Integer.toBinaryString(arr1[n] | arr2[n]).replace("1","#").replace("0"," ");
StringBuilder sb = new StringBuilder();
for(int i=0; i<N-binary_str.length(); i++){
sb.insert(0," ");
}
sb.append(binary_str);
answer[n] = sb.toString();
}
return answer;
}
}
class Solution {
public String[] solution(int N, int[] arr1, int[] arr2) {
String[] answer = new String[N];
for(int n=0; n<N; n++){
answer[n] = String.format("%0"+N+"d", Long.parseLong(Integer.toBinaryString(arr1[n] | arr2[n]))).replace("1","#").replace("0"," ");
}
return answer;
}
}
시도 2에 비해 실행 속도가 굉장히 느림을 알 수 있었습니다.
// Integer.to진수String(바꿀 정수) 메소드 이용
System.out.println(Integer.toBinaryString(20)); // 2진수 : 10100
System.out.println(Integer.toOctalString(20)); // 8진수 : 24
System.out.println(Integer.toHexString(20)); // 16진수 : 14
// Integer.parseInt(숫자로 구성된 문자열, 진수) 메소드 이용
System.out.println(Integer.parseInt("100", 2)); // 4
System.out.println(Integer.parseInt("100", 10)); // 100
// StringBuilder/Buffer의 insert(추가할 인덱스 위치, 값) 메소드 이용
sb.insert(0," ");
// String.format("%[padding값][몇자리로 출력할지][몇진수로 출력할지]", 값) 메소드 이용
String.format("%02d", 3) // 03
TIP : 10진수를 원하는 진수로 바꿀 때 자주 사용되는 메소드인 "Integer.to[Binary, Octal, Hex]String(바꿀 정수)"를 기억하자