🙈

⃝ 동글동글 ⃝

🪐ᐩ˖ 🍎

CodingTest/Programmers

[프로그래머스/Programmers] [1차] 비밀지도 (Java - BinaryString)

JONG_UK 2023. 1. 6. 15:59
728x90
반응형
SMALL

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

프로그래머스

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

programmers.co.kr


⭐️ 코드

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];
        for(int i = 0; i < n; i++) {
            // Integer.toBinaryString() : 이진수로 바꿔줌
            String binaryNum1 = Integer.toBinaryString(arr1[i]);
            String binaryNum2 = Integer.toBinaryString(arr2[i]);

            // 숫자의 길이 맞추기 위해 0 삽입
            String[] binaryNum1Arr = insertZero(binaryNum1, n);
            String[] binaryNum2Arr = insertZero(binaryNum2, n);

            // 한 행씩 비밀지도 맞추기
            StringBuilder sb = new StringBuilder();
            for(int j= 0; j<n; j++) {
                if(binaryNum1Arr[j].equals("1") || binaryNum2Arr[j].equals("1")) {
                    sb.append("#");
                } else {
                    sb.append(" ");
                }
            }
            // 완성 행 answer배열 삽입
            answer[i] = sb.toString();
        }
        return answer;
    }
    private String[] insertZero(String binaryNum, int n) {
        if(binaryNum.length() != n) {
            String zero = "";
            for(int j = 0; j<n-binaryNum.length(); j++) {
                zero += "0";
            }
            binaryNum = zero + binaryNum;
        }
        return binaryNum.split("");
    }
}

💡 문제 풀이

음 생각보다 어렵진 않은 문제다. 아래의 함수만 알면 쉽게 풀 수 있다.

Integer.toBinaryString(arr);

물론 프로그래머스 3진법 뒤집기 문제에서 했던 것처럼 Integer.parseInt(arr, 2)라는 2진수 변환 함수를 써서 몇 가지 변환 과정을 거치면 풀 수 있지만 위 함수를 이용하면 조금 더 코드를 간결하게 짤 수 있다.

 

이 문제에서 가장 중요한건 숫자를 이진수로 바꾸는 것 도 있지만 숫자의 길이를 맞추는 것도 중요하다. 

우리의 결과는 아래와 같은 표를 만들어야 하기 때문이다. 

 

 

private String[] insertZero(String binaryNum, int n) {
    if(binaryNum.length() != n) {
        String zero = "";
        for(int j = 0; j<n-binaryNum.length(); j++) {
            zero += "0";
        }
        binaryNum = zero + binaryNum;
    }
    return binaryNum.split("");
}

이진수로 변환한 문자열을 받아 길이를 5(n) 만큼 맞춰줄 수 있도록 앞에 0을 삽입하는 형식의 함수를 만들었다. 마지막 return 값은 우리가 두 수를 비교하기 편하게 배열 형태로 반환할 수 있도록 해줬다. 

 

변환하여 출력 한 결과는 위와 동일하다.

// 한 행씩 비밀지도 맞추기
StringBuilder sb = new StringBuilder();
for(int j= 0; j<n; j++) {
    if(binaryNum1Arr[j].equals("1") || binaryNum2Arr[j].equals("1")) {
        sb.append("#");
    } else {
        sb.append(" ");
    }
}
// 완성 행 answer배열 삽입
answer[i] = sb.toString();

마지막 포문을 통해 하나씩 맞는지 검사하고 비밀지도 한 행을 완성시켜 answer [ ]에 넣어주면 끝난다!!

 

 

 


👀 후기

Integer.toBinaryString(int);

위 코드를 알면 정말 간편해 지기 때문에 앞으로 이진수 변환에는 꼭 써먹어야겠다 ㅎㅎ

728x90
반응형
LIST