알고리즘
프로그래머스 - 비밀지도
계양 꿀주먹
2024. 4. 12. 18:18
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
String[] binary1 = new String[n];
String[] binary2 = new String[n];
for(int i = 0; i < n; i++) binary1[i] = Integer.toString(arr1[i], 2);
for(int i = 0; i < n; i++) binary2[i] = Integer.toString(arr2[i], 2);
for(int i = 0; i < n; i++) {
StringBuilder sb = new StringBuilder();
// ex) 9 = 1001 이므로 앞에 빈 0 채워주기
if(binary1[i].length() < n) binary1[i] = plusZero(binary1[i], n);
if(binary2[i].length() < n) binary2[i] = plusZero(binary2[i], n);
System.out.println(binary1[i]);
for(int j = 0; j < n; j++) {
if(binary1[i].charAt(j) == '1' || binary2[i].charAt(j) == '1') sb.append('#');
else sb.append(' ');
}
answer[i] = sb.toString();
}
return answer;
}
public String plusZero(String binary, int n) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < n - binary.length(); i++) sb.append("0");
sb.append(binary);
return sb.toString();
}
}
입력받은 숫자를 2진수로 변환하여, 1이면 # 0이면 공백으로 채운 두 문자열을 비교하여 둘 중 하나라도 #이 있다면 # 을 넣은 문자열 배열을 반환하는 문제였습니다.
코드가 깔끔하지 않지만,,, 먼저 입력받은 숫자를 2진수로 변환합니다. 이 때 문제가 발생하게 되는데
입력 예시처럼 n은 5일 때 입력받은 숫자가 9라면 2진수로 변환시 01001이 아닌 1001로 변환됩니다.
이를 해결하기 위해 메소드를 정의하여, n보다 변환한 숫자의 길이가 작을 때 앞에 0을 더하도록 만들었습니다.
이후에 각 2진수에서 1 이 있는지 비교하여 답을 반환했습니다.