https://school.programmers.co.kr/learn/courses/30/lessons/17681
지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다
지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다
: OR 연산과 동일!
1 | 1 >> 1
0 | 1 >> 1
0 | 0 >> 0
sb.setLength(0);
가 가장 빠르다고 한다!
참고
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n]; // 정답을 리턴할 String 배열
StringBuilder sb = new StringBuilder(); // String 배열 하나를 만들 StringBuilder
int k = 0; // answer String 배열
for(int i = 0; i<n ; i++){
String binary = Integer.toBinaryString(arr1[i] | arr2[i]);
// arr1 OR arr2 연산 결과를 String으로 만들어 담기
sb.setLength(0); // StringBuilder 비우기
for (int j = 0; j<binary.length() ; j++){ // 만들어진 binary 배열 길이만큼
if(binary.charAt(j) == '1' ){ // OR 연산 결과가 1이면 # 붙이기
sb.append("#");
}else{ // OR 연산 결과가 0이면 공백 붙이기
sb.append(" ");
}
// 이진수 배열의 크기가 정사각형의 크기보다 작으면 그만큼 앞에 공백 삽입
for(int l = sb.length()-1 ; l<n-binary.length() ; l++){
sb.insert(0, " ");
}
}
answer[k++] = sb.toString(); // 만들어진 string 배열에 넣기
}
return answer;
}
}
0.05ms ~ 0.22ms
테스트 1 〉 통과 (0.10ms, 74.2MB)
테스트 2 〉 통과 (0.22ms, 67.3MB)
테스트 3 〉 통과 (0.07ms, 78MB)
테스트 4 〉 통과 (0.11ms, 67.7MB)
테스트 5 〉 통과 (0.10ms, 75.6MB)
테스트 6 〉 통과 (0.16ms, 86.8MB)
테스트 7 〉 통과 (0.06ms, 71.6MB)
테스트 8 〉 통과 (0.05ms, 74.1MB)
answer[i] = answer[i].replaceAll("1", "#");
모든 문자열을 원하는 문자 값으로 변경한다.
위의 경우 모든 1을 #으로 변경하는 데에 사용
가독성이 좋지만 시간이 오래 걸린다!
정규표현식을 사용할 수도 있다.
if (answer[i].length() < n) {
answer[i] = "0".repeat(n - answer[i].length()) + answer[i];
}
반복할 문자열.repeat(반복할 횟수)
str = String.format("%" + n + "s", jinsuLEE_str) // n 자리 문자열로 전환
앞쪽 공백 채우기에 사용함
비트 연산자를 사용하니 속도가 확연히 빨랐다! 무려 다른 스터디원들의 800배.. 우하하 1초대도 나오기 힘든데 라며 눈이 세 배는 커졌다고 하셨다 야호~!!