👀 문제
https://programmers.co.kr/learn/courses/30/lessons/17681
👊 도전
1. 설계
- 십진수를 이진수로 변환한다.
- 변환한 이진수 길이가 n이 되도록 앞에 0을 붙여준다.
- 둘다 0일때만 공백을, 아니라면 #을 붙인다.
2. 구현 (성공 코드)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.*;
/**
*
* @author HEESOO
*
*/
class Solution {
public String makeZero(String str, int n){//이진수 앞에 0을 채워주는 함수
int cnt=n-str.length();
while(cnt>0){
str="0"+str;
cnt--;
}
return str;
}
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = {};
answer=new String[n];
Arrays.fill(answer,"");
String str1="", str2="";
int numSize=0;
for(int i=0;i<n;i++){
str1=Integer.toBinaryString(arr1[i]);//이진수 변환
str2=Integer.toBinaryString(arr2[i]);
str1=makeZero(str1, n);
str2=makeZero(str2, n);
for(int j=0;j<n;j++){
if(str1.charAt(j)=='0'&&str2.charAt(j)=='0')
answer[i]+=" ";
else
answer[i]+="#";
}
}
return answer;
}
}
3. 결과
🤟 성공 🤟
4. 설명
- 십진수를 이진수로 변환한 값의 길이가 n보다 작다면 앞에 0을 붙여준다.
- Integer.toBinaryString()함수로 십진수를 이진수로 변환한다.
- 바뀐 이진수는 길이 n을 만족해야하므로, 만약 부족하다면 makeZero()함수를 통해 0을 채운다.
- 완성된 이진수를 비교하며 조건에 맞게 문자열을 만든다.
- charAt()함수로 문자를 하나씩 비교한다.
- 둘다 0일 때만 공백을, 나머지는 벽을 뜻하는 #을 만든다.
👏 해결 완료!
문제를 꼼꼼하게 안읽어서 살짝 삽질했다.