유형: 구현
문제: 프로그래머스 - [1차] 비밀지도
n
개의 숫자가 들어있는 arr1
과 arr2
를 해독해 비밀지도를 찾는다. 1
, 공백이 0
이라고 했을 때 얻을 수 있는 이진수에 해당된다. arr1
과 arr2
의 요소를 하나씩 이진수로 변환
재귀 호출로 이진수 변환하기
스택이 너무 쌓일까봐 문제에서는 재귀로 구현하지 않았다.
재귀 방법도 알아두면 좋으니 메모!public static void toBinary(int n) { if (n == 0) return; toBinary(n / 2); System.out.print(n % 2); }
변환한 각각의 이진수 비교
1
이면 #
(벽)공백
해독 결과 저장
class Solution {
public String[] solution(int n, int[] arr1, int[] arr2) {
String[] answer = new String[n];
for (int i = 0; i < n; i++) {
// 이진수 변환
String s1 = toBinary(arr1[i], n);
String s2 = toBinary(arr2[i], n);
// 암호 해독
StringBuilder sb = new StringBuilder();
for (int j = 0; j < n; j++) {
if (s1.charAt(j) == '1' || s2.charAt(j) == '1' ) {
sb.append("#");
continue;
}
if (s1.charAt(j) == s2.charAt(j)) {
sb.append(" ");
}
}
// 해독 결과 저장
answer[i] = sb.toString();
}
return answer;
}
public static String toBinary(int n, int size) {
StringBuilder sb = new StringBuilder();
while (n > 0) {
sb.append(n % 2);
n /= 2;
}
while (sb.length() < size) {
sb.append("0");
}
return sb.reverse().toString();
}
}