1차 비밀지도

J·2021년 4월 4일
0

코딩테스트 연습

목록 보기
19/28




함수 이용


public class 비밀지도 {
    public static String[] solution(int n, int[] arr1, int[] arr2) {
        String[] a = new String[n];
        for(int i=0;i<n;i++){
            a[i] = Integer.toBinaryString(arr1[i]|arr2[i]); //❓

	    a[i] = String.format("%" + n + "s", answer[i]); //❓
            a[i] = a[i].replace("0"," "); //❓
            a[i]= a[i].replace("1","#");
        }
        return a;
    }

    public static void main(String[] args) {
    
        //케이스1
        int n1 = 5;
        int [] arr1 = {9, 20, 28, 18, 11};
        int [] arr2 = {30, 1, 21, 17, 28};

	//케이스2
        int n2 = 6;
        int [] arr3 = {46, 33, 33 ,22, 31, 50};
        int [] arr4 = {27 ,56, 19, 14, 14, 10};

        //케이스1      "#####","# # #", "### #", "# ##", "#####"
        //케이스2      "######", "### #", "## ##", " #### ", " #####", "### # "
        //for(String i: solution(n,arr1,arr2))  //케이스1
        for(String i: solution(n,arr3,arr4))    //케이스2
        	System.out.println(i);
    }
}

  1. Integer.toBinaryString(십진수);
    int타입인 십진수를 string타입의 이진수로 바꾸어준다.
  1. String.format("%" + n + "s", 문자열);
    위의 코드에서 이진수의 앞자리가 0일때 소실되지 않게끔 자릿수를 정해주는 역할.
    n=6이여서 %6s를 의미(문자열 길이가 6) 이외에 %d %c 등등 다양하게 사용 가능
  1. 멤버.replace("교체전 문자열", "교체후 문자열");
    위의 코드에서 1을 #으로 바꾸고 0을 공백으로 바꾸어주는 역할
  1. 비트연산
    | : 하나라도 1이면 1
    & : 둘 다 1이면 1
    십진수에서 사용해도 됨
    ex) System.out.print( 4 | 9 ); // 13
    // 0100 1001 -> 1101

이진수로 바꾸기만 구현

format함수를 몰라서 이렇게 하였음.

import java.util.*;

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        int [] arr = new int[n]; //비트연산저장
        String[] answer = new String[n];
        Stack<Integer> stack = new Stack<>(); 
        
        for(int i=0;i<n;i++){
            //비트연산
            arr[i] = arr1[i] | arr2[i];
            
            //이진수로 바꾸기
            for(int j=0;j<n;j++){
                stack.push(arr[i]%2);
                arr[i] /= 2;
            }
            
            answer[i] = Integer.toString(stack.pop()); //❓
            while(!stack.empty()) answer[i] += Integer.toString(stack.pop()); 
            
            //#로 바꾸기
            answer[i] = answer[i].replace("1","#");
            answer[i] = answer[i].replace("0"," ");
        }        
        
        return answer;
    }
}

answer[i] = Integer.toString(stack.pop());

Stack을 사용하였는데 pop하는 부분에서 처음부터 += 할 경우 null값이 그대로 존재하기 때문에 할당(= 를) 해주어야 한다.

while(!stack.empty())

stack에 존재하는 값들을 모두 pop 하기 위해 for(i=0;i<stack.size();i++) 를 사용하였을 때는 안돼서 empty()함수를 사용하였다.

0개의 댓글