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

밍주🫧 ·2025년 3월 2일
0
post-thumbnail

문제 원문

프로그래머스 비밀지도

문제 정리

암호화 된 정수 배열을 이진수로 바꿔서 덧셈을 하는 문제

처음에는 단순히 2진수로 바꿔서 자릿수 돌아가면서 덧셈만 해주려고 했는데 문제가 발생했다

예를 들어,
arr1[0] = 9, arr2[0] = 30 일 때,
각각 2진수로 변환하면 1001, 11110으로 자릿수가 맞지 않는다.
따라서, 자릿수를 맞춘 후 연산을 진행해야 하는 것!

최종 코드

public class Main

    public String[] formatChk( String tmpStr, int len) {

        //길이가 같지 않다면, 다섯자리로 만들어줘야함
        if(len != tmpStr.length()) {
            String zeroStr = "";
            //모자란 자릿수만큼 0을 채워줌
            for (int i = 0; i < len - tmpStr.length(); i++) {
                zeroStr += "0";
            } 

            //0을 앞으로 더해야 함 ex)101 -> 00101
            tmpStr = zeroStr + tmpStr;
        }

        return tmpStr.split("");
    }


    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n];

        String[] tmpArr1 = new String[n];
        String[] tmpArr2 = new String[n];

        for (int i = 0; i < n; i++) {
            //2진수로 변환
            String arrStr1 = Integer.toBinaryString(arr1[i]);
            String arrStr2 = Integer.toBinaryString(arr2[i]);


            //2진수 변환 시 자릿값 안맞는 부분을 위한 메소드
            tmpArr1 = formatChk(arrStr1, n);
            tmpArr2 = formatChk(arrStr2, n);

            String hint = "";

            for (int j = 0; j < n; j++) {
                //둘 중 하나라도 1이라면 #, 아니면 공백
                if(tmpArr1[j].equals("1")|| tmpArr2[j].equals("1")) hint += "#";
                else hint += " ";
            }
            answer[i] = hint;

        }


        return answer;
    }
 }


성공!!

0개의 댓글

관련 채용 정보