[프로그래머스] 비밀지도(자바)

지수·2021년 8월 29일
0
post-thumbnail

알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!

📄 문제

[프로그래머스] 비밀지도


👩‍💻 풀이

1. 문제 이해

이 문제는 가로, 세로 길이가 n인 정사각배열에
arr1, arr2 안 값을 2진법으로 변환하여 넣고
비트연산 or(||) 연산자를 활용하여 같은 위치에 하나라도 1이면 1을 반환하도록 연산,
연산 결과를 1은 #으로, 0은 (공백)으로 출력하는 문제이다.


2. 2진법 변환 메소드 구현 풀이

import java.util.ArrayList;
import java.util.List;

public class Solution {

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

        System.out.println(solution(n,arr1, arr2).toString());
    }

    public static List<String> solution(int n, int[] arr1, int[] arr2) {
        List<String> list1 = toBinary(n, arr1);
        List<String> list2 = toBinary(n, arr2);
        List<String> answer = new ArrayList<>();


        for(int i = 0; i < n; i++) {
            StringBuilder sb = new StringBuilder();
            String s1 = list1.get(i);
            String s2 = list2.get(i);
            for(int j = 0; j < n; j++) {
                if(s1.charAt(j) == '1' | s2.charAt(j) == '1') {
                    sb.append("#");
                }else {
                    sb.append(" ");
                }
            }
            answer.add(sb.toString());
        }
        return answer;
    }

    //2진수로 변환하는 메소드
    private static List<String> toBinary(int n, int[] arr) {
        List<String> binary = new ArrayList<>();

        for(int i = 0; i < n; i++) {
            StringBuilder sb = new StringBuilder();
            int share = arr[i];

            while(share > 0) {
                int remain = share % 2;
                share /= 2;
                sb.append(remain);
            }

            while(sb.toString().length() < n) { // 자릿수 채우도록 0 붙여줌
                sb.append("0");
            }

            binary.add(sb.reverse().toString()); //거꾸로 붙여서 뒤집음
        }
        return binary;
    }
}

3. 내장 함수 toBinaryString 활용 풀이

class Solution {

    public String[] solution(int n, int[] arr1, int[] arr2) {

        String[] answer = new String[n];

        for(int i = 0; i < n; i++) { 
            answer[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
            answer[i] = String.format("%"+n+"s", answer[i]);
            answer[i] = answer[i].replaceAll("[1]", "#");
            answer[i] = answer[i].replaceAll("[0]", " ");
        }

        return answer;
    }
}

profile
사부작 사부작

0개의 댓글