본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 17681번: [1차] 비밀지도 [Java]

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 코드

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        for(int i = 0; i < n; i++) {
            String s1 = Integer.toBinaryString(arr1[i]);
            String s2 = Integer.toBinaryString(arr2[i]);
            String zero = "0";
            
            if(s1.length() < n)
                s1 = zero.repeat(n - s1.length()) + s1;
            if(s2.length() < n)
                s2 = zero.repeat(n - s2.length()) + s2;
            
            answer[i] = "";
            for(int j = 0; j < n; j++) {
                if(s1.charAt(j) == '1' || s2.charAt(j) == '1')
                    answer[i] += "#";
                else
                    answer[i] += " ";
            }
        }
        return answer;
    }
}

2. 설명

문제의 길이 수가 길어서 어려워 보이지만 해결 방법은 간단한 문제입니다.

String[] answer = new String[n];
for(int i = 0; i < n; i++) {
    String s1 = Integer.toBinaryString(arr1[i]);
    String s2 = Integer.toBinaryString(arr2[i]);
    String zero = "0";

    if(s1.length() < n)
        s1 = zero.repeat(n - s1.length()) + s1;
    if(s2.length() < n)
        s2 = zero.repeat(n - s2.length()) + s2;

각 배열에 저장된 값을 Integer.toBinaryString() 메서드를 통해서 10진수의 값을 2진수로 변환하는데 변환된 값의 길이가 n보다 작을 수 있기에 작은 경우에는 n만큼의 길이가 될 정도로 0을 앞에 채워줍니다.

    answer[i] = "";
    for(int j = 0; j < n; j++) {
        if(s1.charAt(j) == '1' || s2.charAt(j) == '1')
            answer[i] += "#";
        else
            answer[i] += " ";
    }
}

String 배열을 초기화하지 않으면 null값이 자동으로 저장되기에 공백으로 초기화를 해준 뒤 n만큼의 길이로 이루어진 2진수 값에 따라 answer[i]에 1일 경우 벽("#")을 0일 경우에는 공백(" ")을 저장해 한다면 문제는 해결된다.

3. 정리

  1. arr1과 arr2에 저장된 10진수를 n만큼 길이로 2진수 문자열로 변환
  2. 변환된 문자열의 문자가 1일 경우 벽("#")을 0일 경우 공백(" ")을 문자열로 채워 넣는다.
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges