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

샨티(shanti)·2022년 12월 17일
0

코딩테스트

목록 보기
4/35
post-custom-banner

매일 매일 하루 한 문제씩.
꾸준히 이어가는 코딩테스트 풀이 기록 ✅

한 두어 번 풀었던 문제 같은데...
오늘 시간도 너무 오래 걸렸고 특히 2진수로 변환하는 부분은 왜 해도 해도 늘지 않는거지? 라는 자책감이 든 것 같은 하루.
더 당황스러웠던 건, 프로그래머스 예시로 주어졌던 sample 테스트 두 개 모두 오류가 있어서 계속 내가 틀린줄 알고 로직을 고치고 있었는데
알고보니 그냥 그 샘플 자체에 오타인지 오류인지. 여튼 시간을 꽤 많이 낭비해서 당황스러웠음.
혹 미리 주어진 sample로 테스트코드 만들려는 분들은 주어진 n의 길이와는 맞지 않는 부분에 수정이 필요하다는 점 인지하시길.
에를들어 n 값이 6으로 주어졌는데 잘 보면 답안에 길이가 5인 답이 섞여있음. "## ##" 이런 식으로...
요럴 떈 앞에다가 공백 하나 넣어주어야 함. " ## ##" 요러케.

할튼!!!
다른 풀이들은 좀 깔끔하기도 하고 특히 Binary로 바로 바꿔주는 함수는 아주아주 유용할 것 같지만.
모르는 함수라면 어쨌든 이외의 방법으로라도 풀어내야 하는 것이 코딩 테스트이기에.
오늘도, 숙련도를 높여가자!


문제.


프로그래머스 비밀지도(자바) 코드 공유

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] convertedArray1 = convertToBinary(n, arr1);
        String[] convertedArray2 = convertToBinary(n, arr2);

        return convertToEncodedMap(n, convertedArray1, convertedArray2);
    }

    public String[] convertToBinary(int n, int[] array) {
        String[] convertedArray = new String[n];

        for (int i = 0; i < n; i += 1) {
            String accumulator = "";
            int number = array[i];

            while(number > 0) {
                int remain = number % 2;
                accumulator = remain + accumulator;
                number = number / 2;
            }

            if (accumulator.length() < n) {
                String zeroCharacter = "";
                for (int j = 0; j < n - accumulator.length(); j += 1) {
                    zeroCharacter += "0";
                }
                accumulator = zeroCharacter + accumulator;
            }
            convertedArray[i] = accumulator;
        }
        return convertedArray;
    }

    public String[] convertToEncodedMap(int n, String[] array1, String[] array2) {
        String[] result = new String[n];

        for (int i = 0; i < n; i += 1) {
            String accumulator = "";
            int cycle = 0;

            while (cycle < n) {
                if (array1[i].charAt(cycle) == '0' && array2[i].charAt(cycle) == '0') {
                    accumulator += " ";
                    cycle += 1;
                    continue;
                }

                accumulator += "#";
                cycle += 1;
            }

            result[i] = accumulator;
        }
        return result;
    }
}

처음에 문제를 풀기 전 계획한 대로 convert가 2~3개 정도 필요하다고 판단했고 그대로 메서드 먼저 만든 뒤 테스트코드 작성 후 코드를 짜 보았다.
중요한 건, 테스트코드를 1개 케이스로만 만들어놨더니 엣지 케이스를 잡아내지 못하더라.

테스트코드를 많이 만들고 싶지 않다면 주어진 샘플 외에 엣지케이스 위주로 1~2개 더 추가하는 것이 좋을 듯.
자바스크립트로도 풀려 했는데 시간이 너무 많이 흘러서 우선 해야할 것 먼저 한 뒤에 자바스크립트로도 풀어봐야겠다.

profile
가벼운 사진, 그렇지 못한 글
post-custom-banner

0개의 댓글