class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for(int i=0; i<n; i++){
String str1 = Integer.toBinaryString(arr1[i]);
String str2 = Integer.toBinaryString(arr2[i]);
str1 = "0".repeat(n-str1.length())+str1;
str2 = "0".repeat(n-str2.length())+str2;
StringBuilder sb = new StringBuilder();
for(int j=0; j<str1.length(); j++){
if(str1.charAt(j) == '1' || str2.charAt(j) == '1'){
sb.append("#");
} else sb.append(" ");
}
answer[i] = sb.toString();
};
return answer;
}
}
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
String temp;
for(int i = 0 ; i < n ; i++){
temp = String.format("%16s", Integer.toBinaryString(arr1[i] | arr2[i]));
temp = temp.substring(temp.length() - n);
temp = temp.replaceAll("1", "#");
temp = temp.replaceAll("0", " ");
answer[i] = temp;
}
return answer;
}
}
풀이2(다른 분의 풀이)
- 배열의 정수는 최대 16의 길이를 가지고 있다.(입력 형식 중 n은 1 이상 16 이하) 따라서 or 연산으로 BinaryString으로 변환한 값을 16자로 받은 뒤 substring으로 잘라주었다. "%"+n+"s" 방식보다 빠르다고 한다!
- StringBuilder를 사용할 필요 없이 replaceAll 만으로 답을 만들어냈다.
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for(int i=0; i<n; i++){
String str = Integer.toBinaryString(arr1[i] | arr2[i]);
str = "0".repeat(n-str.length()) + str;
str = str.replaceAll("1", "#");
str = str.replaceAll("0", " ");
answer[i] = str;
};
return answer;
}
}
위의 풀이2를 참고하여 다시 풀어보았다. 풀이2에 비해 느린 테스트도 있지만 비교적 시간대가 안정적으로 나왔다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스/자바] 가장 가까운 같은 글자 (0) | 2023.03.15 |
---|---|
[프로그래머스/자바] 신고 결과 받기 (0) | 2023.03.14 |
[프로그래머스/자바] 완주하지 못한 선수 (0) | 2023.03.13 |
[프로그래머스/자바] 숫자 문자열과 영단어 (0) | 2023.03.13 |
[프로그래머스/자바] 없는 숫자 더하기 (0) | 2023.03.13 |