프로그래머스 (카카오) | LV. 1차 비밀지도 - 구현 문풀 (Java)

728x90

⬛ 프로그래머스 (카카오) | LV. 1차 비밀지도 - 구현 문풀 (Java)

문제 설명

💚문제 접근 방식

  1. 우선 처음에는 10진수로 들어온 값을 2진수로 변형
  2. 변형된 값을 n의 자릿수로 맞춰줘야 함
  3. 두 arr 비교하여 둘다 0이면 공백, 하나라도 1이면 #을 붙이는 식으로 answer 세팅

문제는 중간에 2) 를 처리할 때, String.format(”%0xd”, int) 이 함수를 활용하는 과정에서 문제가 생겼다. 착각한 것인데 이 문제는 n이 매개변수로 들어오기 때문에, 각 케이스별로 다른 자릿수를 요구하고 있는데 내 마음대로 저 함수를 활용해버린 것이다.

그래서 직관적으로 len 길이를 매번 n에서 뺀 후 앞에 0을 붙여줄 값을 구해서 for문으로 이어붙이는 방식을 택했다.

💚 제출 코드

import java.util.*;
class Solution {
    /*이 문제는 String.format으로 길이 맞출 수 가 없음
    그럴 경우 n자릿수가 다 다른데 어떻게 처리할 거임 ? */

    //솔루션 함수 
    public List<String> solution(int n, int[] arr1, int[] arr2) {
        //정답 배열이고 
        List<String> answer = new ArrayList<>();
        
        //(1) 10진수를 2진수로 변환을 시켜야 하는데 
        List<String> list1 = new ArrayList<>();
        
        for(int x : arr1){
           String tmp = Integer.toBinaryString(x);
           if(tmp.length() != n){ //다른 경우 앞에 0을 붙여줘야 됨 
               String zero = "";
               int len = n- tmp.length();//모자란 자릿수 
               for(int i=0; i<len; i++){
                   zero += "0";
               }
               //얘를 앞에 붙이기 
               tmp = zero + tmp;
               list1.add(tmp);
               System.out.println(tmp);
           }else{
               list1.add(tmp);
               System.out.println(tmp);
           }
        }    
        
        List<String> list2 = new ArrayList<>();
        for(int x : arr2){
           String tmp = Integer.toBinaryString(x);
           if(tmp.length() != n){ //다른 경우 앞에 0을 붙여줘야 됨 
               String zero = "";
               int len = n- tmp.length();//모자란 자릿수 
               for(int i=0; i<len; i++){
                   zero += "0";
               }
               //얘를 앞에 붙이기 
               tmp = zero + tmp;
               list2.add(tmp);
               System.out.println(tmp);               
           }else{
               list2.add(tmp);
               System.out.println(tmp);
           }
        }
        
        //(3) 정답 세팅하기 
        for(int i=0; i<n; i++){
            String a = list1.get(i);
            String b = list2.get(i);
            
            String ans = "";
            for(int j=0; j<a.length(); j++){
                if(a.charAt(j) == '0' && b.charAt(j) == '0') {
                    ans += " ";//공백 붙이고 
                }else{
                    ans += "#"; //그 외에는 모두 # 붙임 
                }
            }
            
            answer.add(ans);
        }
        
        return answer;
    }
}

💚 회고

한달 정도 안했더니 많이 버벅거리긴 했다. 그래도 차근 차근 풀었다 .

728x90