이번에 프로그래머스를 풀어봤는데 생각보다 재미가 있어서 가지고 와 보았다.
문제 내용은 https://programmers.co.kr/learn/courses/30/lessons/17681
여기 가서 확인해보면 된다.
일단 코드부터 공개하도록 하겠다.
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
int[] ar1 = new int[n];
for (int i = 0; i < n; i++) {
ar1[i] = arr1[i] | arr2[i];
}
for(int i = 0; i < ar1.length; i++){
String binary = Integer.toBinaryString(ar1[i]);
if(binary.length() < n){
int cha = n - binary.length();
for(int j = 0; j < cha; j++){
binary = "0" + binary;
}
}
binary = binary.replaceAll("1", "#");
binary = binary.replaceAll("0", " ");
answer[i] = binary;
}
return answer;
}
}
일단 int 배열 ar1을 크기를 n으로 잡아서 하나 만들어줬다.
문제에서 지도의 크기가 n의 크기라 했기 때문에 배열로 바꾸면 n개의 크기를 가진다는 소리이기 때문이다.
배열 크기만큼(n, ar1, arr1, arr2.length도 가능) for문을 돌려서 비트 연산자 | 로 ar1에 값을 저장해 주었다.
비트 연산자 | (or)을 이용한 이유는 둘 중 하나의 값이 1이기만 하면 1을 반환해 주기 때문이다.
(ex. 01101 | 10010 =11111)
다음 for문을 돌려 배열 크기만큼(당연히 n도 됨) 돌려 binary라는 String 문자열 변수에 Integer.toBinaryString을 이용해 ar1의 값을 이진수로 넣어준다.
그다음 if문으로 binary의 길이를 검사해 n보다 적으면 n - binary.length 만큼 0을 붙여준다. (0인 부분은 공백 처리되기에 0을 붙여줘야 함. 그리고 1의 경우 이진수로 1 이기에 계산할 때 오류가 난다, 0을 붙여 00001로 만들어야 함.)
내가 cha변수를 만든 건 for문 안에 j < n- length(); 를 하니 오류가 나서 이다.(왜 나는지 모름)
그다음은 replaceAll을 이용해 binary에 있는 모든 문자 "1"을 "#"으로 바꾸고 "0"을 " "공백 처리한다.
그 값을 answer에 저장하고 리턴하면 된다.
이번에 사용한 replace에 대한 것도 올릴 예정이다. 아마 다음 포스팅이 되지 않을까 싶다.
간간히 올리는 내 풀이가 도움이 되길 바란다.
'알고리즘 > 프로그래머스 풀이' 카테고리의 다른 글
[JAVA] 프로그래머스 - 제일 작은 수 제거하기 (0) | 2021.11.10 |
---|---|
[JAVA] 프로그래머스 풀이 - 예산 (0) | 2021.11.09 |
[JAVA] 프로그래머스 2016년 (0) | 2021.11.08 |
[JAVA] 소수 찾기 - 에라토스테네스의 체 (1) | 2021.10.20 |
[JAVA] 2019 카카오 개발자 겨울 인턴쉽 크레인 인형뽑기 게임 풀이 (0) | 2021.10.13 |