반응형
SMALL
https://programmers.co.kr/learn/courses/30/lessons/17681
- 10진수를 2진수로 바꿔주는 함수
- Integer.toBinaryString()
- 비트연산 가능
- 비트연산
- | (OR)
- 둘 중 하나라도 1이면 1, 아니면 0
- ex)
- Integer.toBinaryString(9 | 3);
- & (AND)
- 둘 모두 1이면 1, 아니면 0
- ^ (XOR)
- 둘 다 다를 때 1
- ~
- 비트 전환 연산자
- 1이면 0, 0이면 1
- | (OR)
- 속도가 다소 느림
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
/* 비트연산
Integer.toBinaryString()을 이용하여 10진수를 2진수로 변환한다.
(a | b) 일 때 둘을 비교하여 하나라도 1이면 1, 아니면 0으로 변환한다.
*/
for(int i = 0; i < n; i++) {
answer[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
}
for(int i = 0; i < n; i++) {
/* "%숫자s" 이면 숫자 자리수 위치에 맞춰서 들어감
예를들어 ("%7s", "KAKAO") 이면 >> " KAKAO"
여기서 해주는 이유는 Integer 형태였던 숫자를 한자리씩 문자열로 변환해서 넣어주기 위함
*/
answer[i] = String.format("%" + n + "s", answer[i]);
answer[i] = answer[i].replace("1", "#");
answer[i] = answer[i].replace("0", " ");
}
return answer;
}
}
- 다른 풀이
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
int[] temp = new int[n];
for(int i = 0 ; i < n ; i++){
String resultStr = "";
int target = 1;
int arr = arr1[i] | arr2[i];
for(int j = 0 ; j < n; j++){
resultStr = ((arr & target) == 0 ? " " : "#") + resultStr;
target = target << 1;
}
answer[i] = resultStr;
}
return answer;
}
}
반응형
LIST
'JAVA > Algorithm' 카테고리의 다른 글
[프로그래머스/java] 기능개발 (큐) (0) | 2020.12.25 |
---|---|
[프로그래머스/java] 프린터 (속도 차이) (0) | 2020.12.23 |
[프로그래머스/java] 예산 (Summer/Winter Coding 2018) (0) | 2020.12.16 |
[프로그래머스/java] x만큼 간격이 있는 n개의 숫자 (0) | 2020.12.14 |
[프로그래머스/java] 행렬의 덧셈 (0) | 2020.12.13 |