[코테/JAVA] 월간 코드 챌린지 시즌1 : 이진 변환 반복하기

    728x90
    반응형

    2022.12.24

    코테 문제풀이 23주차 03번 문제

     

     

    문제

      ① 월간 코드 챌린지 시즌1 : 이진 변환 반복하기


      ② 링크

     

    프로그래머스

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

    programmers.co.kr

     

     

    접근방법

      생각해낸 방법은 1가지

      ① 재귀호출

     

     

    풀이

      ① 접근방법 :

      ② 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    class Solution {
        /*
         * Date: 2022-12-22
         * Time: 17:18
         */
        public int[] solution(String s) {
            return translateToByte(0, s, 0);
        }
     
        /*
         * 재귀호출을 통해 2진법으로 변환 및 '0'제거를 반복한다.
         * @param loop 호출횟수
         * @param s 2진법 문자열
         * @param delCnt '0'제거 횟수
         * @return String[] {반복횟수, '0'제거 횟수} 형태의 int 고정배열
         */
        public int[] translateToByte(int loop, String s, int delCnt) {
            /*
             * @Desc
             * 1. Escape 조건(파라미터로 받는 2진법 문자열이 '1'일때) 설정
             * 2. 2진법 문자열에서 '0'을 제거하며 제거한 횟수를 카운트한다.
             * 3. '1'로만 만들어진 문자열의 길이를 2진법 문자열로 변환한다.
             * 4. 탈출 조건을 만족하면(반복횟수, '0'제거 횟수) 형태의 int 고정배열로 리턴한다.
             */
            if ("1".equals(s))
                return new int[] {loop, delCnt};
            
            String tmp = "";
            for (String str: s.split("")) {
                if ("0".equals(str))
                    delCnt++;
                else
                    tmp += str;
            }
            
            
            return translateToByte(loop+1, Integer.toBinaryString(tmp.length()), delCnt);
        }
    }
    cs

     

     

    결과

     

     

    주의사항

      ① 없음

    728x90
    반응형

    댓글