n : 5,
arr1 : [9, 20, 28, 18, 11]
arr2 : [30, 1, 21, 17, 28]
출력 : ["#####", "# # #", "### #", "# ##", "######"]
n : 6,
arr1 : [46, 33, 33, 22, 31, 50]
arr2 : [27, 56, 19, 14, 14, 10]
처음에는 다음과 같이 풀이 방향을 정했다.
그런데, 다음과 같은 문제들을 마주했다.
해결 방법은 다음과 같았다.
하지만, 이때 2와 3의 문제 풀이에 문제가 있다는 것을 디버깅을 통해 알게 되었다. (디버그를 생활화 하자 ㅠ.ㅠ)
따라서 다음과 같이 수정하였다.
String.format("%" + n + "s", 2진수배열[idx]).replace(' ', '0');
다음으로 3.은 이렇게 해결했다.
나는 (2)로 풀었고, 무사히 답을 얻을 수 있었다.
import java.util.*;
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
String[] binaryArr1 = new String[n];
String[] binaryArr2 = new String[n];
int length = arr1.length;
for (int i = 0; i < length; i ++) {
binaryArr1[i] = Integer.toBinaryString(arr1[i]);
binaryArr2[i] = Integer.toBinaryString(arr2[i]);
}
for (int i = 0; i < length; i ++) {
if (binaryArr1[i].length() != n) {
binaryArr1[i] = String.format("%" + n + "s", binaryArr1[i]).replace(' ', '0');
}
if (binaryArr2[i].length() != n) {
binaryArr2[i] = String.format("%" + n + "s", binaryArr2[i]).replace(' ', '0');
}
}
for (int i = 0; i < length; i ++) {
StringBuilder sb = new StringBuilder();
for (int j = 0; j < length; j ++) {
if (binaryArr1[i].charAt(j) == '0' && binaryArr2[i].charAt(j) == '0') {
sb.append(' ');
} else {
sb.append('#');
}
}
answer[i] = sb.toString();
sb.setLength(0);
}
return answer;
}
}
한 3~4개월 전 마주했을 때는 너무 어려워서 안 풀고 넘어갔던 문제인데, 이번에는 그래도 도전할 엄두가 나서 다행이었다.
그래도 오랜만에 프로그래머스의 문제를 풀다보니..
int length = arr1.length;
for (int i = 0; i < length; i ++) {
binaryArr1[i] = Integer.toBinaryString(arr1[i]);
binaryArr2[i] = Integer.toBinaryString(arr2[i]);
}
이후에 바로 1 -> #, 0 -> ""으로 치환하는 작업이 아니라 print()를 통해서 값이 잘 받아와졌는지부터 확인한다던지?
또는
binaryArr1[i] = String.format("%" + n + "s", binaryArr1[i]).replace(' ', '0');
이 아니라
binaryArr1[i] = String.format("%" + n + "s", binaryArr1[i])
까지 진행해서 print() 해본 후,.replace(' ', '0');
을 진행한다던지?
이제 이력서도 쓰고, 자소서도 쓰다보니 채용 절차의 첫 관문인 코테의 중요성에 대해 더더욱 실감하고 있다.
감시 스터디를 같이 진행하며 위 풀이의 문제 해결에 도움을 준 진혁님에게 감사함을 표하며 이번 주 포스팅은 여기서 끝!