public class 비밀지도 {
public static void main(String[] args) {
int n =5;
int[] arr1 = {9,20,28,18,11};
int[] arr2 = {30, 1, 21, 17, 28};
String[] answer =new String[n];
StringBuilder encoding = new StringBuilder();
StringBuilder decoding = new StringBuilder();
for(int i=0; i<n; i++){
int temp = arr1[i] | arr2[i];
String binary = Integer.toBinaryString(temp);
encoding.append(binary);
if(binary.length() < n){
encoding.insert(0,"0");
}
for(int j=0; j<encoding.length(); j++){
Character getChar = encoding.charAt(j);
if(getChar.equals('1')){
decoding.append("#");
}else{
decoding.append(" ");
}
}
answer[i] = decoding.toString();
encoding.setLength(0);
decoding.setLength(0);
}
System.out.println(Arrays.toString(answer));
}
}
문제점
- 여기서 encoding.length()가 1011 일때는 StringBuilder.insert()를 써도 되지만
encoding.length()가 101 이라면? 0101이 되어버려서 오류가 발생할 수 있다고 생각했습니다.
개선 방안
- StringBuilder 를 사용할 때 V1(insert 할때 while문 돌리기)
if(binary.length() < n){
while(binary.length() == n){
encoding.insert(n-binary.length()-1,"0");
}
- StringBuilder 를 사용할 때 V2(append 해줄때 0 삽입)
encoding.append("0".repeat(n-binary.length())+binary);
- String str =""; 으로 사용하였을 때 또한 같습니다.
str = "0".repeat(n-binary.length())+str;