본문 바로가기
알고리즘

[프로그래머스] [1차] 비밀지도 [Java/자바]

by irerin07 2020. 4. 7.
728x90

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

코드:https://github.com/irerin07/AlgorithmStudyBaek/blob/master/src/programmers_lvl_1/programmers17681.java

 

public class programmers17681 {
    public static void main(String[] args) {
        int n = 6;
        int[] arr1 = {46, 33, 33, 22, 31, 50};
        int[] arr2 = {27, 56, 19, 14, 14, 10};
        String[] answer = solution(n, arr1, arr2);
        for(String s: answer){
            System.out.print(s);
        }
    }

    private static String[] solution(int n, int[] arr1, int[] arr2) {
//        String[] result = new String[n];
//        for (int i = 0; i < n; i++) {
//            result[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
//        }
//
//        for (int i = 0; i < n; i++) {
//            result[i] = String.format("%" + n + "s", result[i]);
//            result[i] = result[i].replaceAll("1", "#");
//            result[i] = result[i].replaceAll("0", " ");
//        }
//
//        return result;
        String[] answer = new String[arr1.length];
        int[] answerInt = new int[arr1.length];
        String[] newArr1 = new String[arr1.length];
        String[] newArr2 = new String[arr2.length];
        String length = "%"+n+"s";

        for(int i = 0; i < arr1.length; i++){
            String a = (String.format(length, Integer.toBinaryString(arr1[i])));
            String b = (String.format(length, Integer.toBinaryString(arr2[i])));
            a = a.replace(' ', '0');
            b = b.replace(' ', '0');
            newArr1[i] = (a);
            newArr2[i] = (b);

        }
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i < arr1.length; i++){
            for(int j = 0; j < n; j++){

                if(newArr1[i].charAt(j) != newArr2[i].charAt(j)){
                    sb.append("#");
                }else{
                    if(newArr1[i].charAt(j)=='1'){
                        sb.append("#");
                    }else{
                        sb.append(" ");
                    }
                }
            }
            answer[i] = sb.toString();
            sb.delete(0, sb.length());

        }

        return answer;
    }
}

 

진짜 진짜 무식한 방법으로 푼 문제.

다음과 같은 방법으로 풀었다.

 

1. 우선 for loop을 돌면서 새로운 String 배열에 Integer.toBinaryString()를 사용하여 10진수를 2진수로 변환하여 저장

2. 그 다음 StringBuffer sb를 선언

3. 2중 for loop을 돌면서 2진수 스트링의 각 char를 비교하여 조건에 맞춰 빈칸 혹은 #을 sb에 append

4. sb를 toString()으로 변환한 뒤 answer배열에 저장

5. sb.delete를 사용하여 sb 초기화

 

그냥 단순하게 '|'(OR) 연산으로 풀 수 있는 문제인데 굉장히 복잡하게 돌아갔다.

 

 

 

 

728x90