[JAVA/프로그래머스] 2018 KAKAO BLIND RECRUITMENT: [1차] 비밀지도

👀 문제

https://programmers.co.kr/learn/courses/30/lessons/17681

👊 도전

1. 설계

  1. 십진수를 이진수로 변환한다.
  2. 변환한 이진수 길이가 n이 되도록 앞에 0을 붙여준다.
  3. 둘다 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. 설명

  1. 십진수를 이진수로 변환한 값의 길이가 n보다 작다면 앞에 0을 붙여준다.
    • Integer.toBinaryString()함수로 십진수를 이진수로 변환한다.
    • 바뀐 이진수는 길이 n을 만족해야하므로, 만약 부족하다면 makeZero()함수를 통해 0을 채운다.
  2. 완성된 이진수를 비교하며 조건에 맞게 문자열을 만든다.
    • charAt()함수로 문자를 하나씩 비교한다.
    • 둘다 0일 때만 공백을, 나머지는 벽을 뜻하는 #을 만든다.

👏 해결 완료!

문제를 꼼꼼하게 안읽어서 살짝 삽질했다.