+2 2018 KAKAO BLIND RECRUITMENT [1차] 비밀지도

이동한·2023년 6월 28일
0

알고리즘 기출

목록 보기
16/22
class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        String temp;
        
        for(int i=0; i<n; i++){
            temp = String.format("%16s",Integer.toBinaryString(arr1[i] | arr2[i])); // 최대길이가 16이므로
            temp=temp.substring(temp.length() - n);
            temp=temp.replaceAll("1","#");
            temp=temp.replaceAll("0"," ");
            answer[i] = temp;
        }
        
        return answer;
    }
}

String.format("",targetStr); -> %16s 16글자로 앞에 채워서
String.replaceAll("","") -> 새로운 문자열 반환하므로 갱신을 위해서는 재 할당 해준다.

2번째

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        
        StringBuilder sb = new StringBuilder();
        
        for(int i=0; i<n; i++){
            int curInt = arr1[i] | arr2[i];
            String cur = toBinaryString(curInt);
            // 부족한 길이는 앞에서 0으로 채워줌
            for(int j=0; j<n-cur.length(); j++){
                sb.append("0");
            }
            sb.append(cur);
            // String.replaceAll로 원하는 문자 치환하기
            String tmp = sb.toString();
            tmp = tmp.replaceAll("1","#");
            tmp = tmp.replaceAll("0"," ");
            
            answer[i] = tmp;
            
            // StringBuilder 초기화
            sb.setLength(0);
            System.out.println(cur);
        }
        
        return answer;
    }
    public String toBinaryString(int data){
        StringBuilder sb = new StringBuilder();
        while(data>0){
            sb.append(data%2);
            data/=2;
        }
        sb.reverse();
        return sb.toString();
    }
}

StringBuilder.reverse()

세번째

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        for(int i=0; i<n; i++){
            int dat = arr1[i] | arr2[i];
            answer[i] = toBinStr(dat,n);
        }
        
        return answer;
    }
    public String toBinStr(int data,int size){
        // 이진문자로 변환
        StringBuilder sb = new StringBuilder();
        while(data>=2){
            sb.append(data%2);
            data/=2;
        }
        sb.append(data%2);
        // 6칸 미만이면 채워주자
        int diff = size - sb.length();
        while(diff>0){
            sb.append('0');
            diff-=1;
        }
        return sb.reverse().toString().replace("1","#").replace("0"," ");
    }
}

다시 볼 점

  1. StringBuilder도 length() 메서드 존재 한다.
  2. String메서드 체이닝 가능 -> sb.reverse().toString().replace("1","#").replace("0"," ");
profile
Pragmatic, Productive, Positivist

0개의 댓글