본문 바로가기
Blog/TIL

[240907] 이진법

by 코젼 2024. 9. 7.
728x90
반응형

🔶 이진법


목차

    / 오늘의 TIL /

    - 이진법은 Integer.toBinaryString() 메서드를 통해 값을 구할 수 있다.


     

    - queue 풀이

    import java.util.*;
    
    class Solution {
        public int[] solution(String s) {
            
            //초기 값 세팅
            Queue<Integer> queue = new LinkedList<>();
            for (char c : s.toCharArray()) {
                queue.add(c - '0');
            }
    
            int zeroCnt = 0, answer = 0;
            while (queue.size() != 1) {
                //queue 에 0이 없을 때까지 진행
                int qs = 0;
                while (qs != queue.size()) {
                    int cur = queue.poll();
                    //0인 경우 제거하고, 제거된 0의 개수를 늘린다.
                    if (cur == 0) zeroCnt++;
                    //1인 경우 다시 queue 에 넣는다.
                    else {
                        queue.add(cur);
                        qs++;
                    }
                }
                //queue 크기를 가지고 2진수 진행
                int size = queue.size();
                //s 가 1인 경우 조기 종료
                if (size == 1) {
                    answer++;
                    break;
                }
                //새로운 값을 저장하기 위해 큐의 값을 초기화 시킨다.
                queue.clear();
    
                while (true) {
                    //2를 나눈 나머지를 queue 에 넣기
                    queue.add(size % 2);
                    size /= 2;
                    //1인 경우 중단
                    if (size == 1) {
                        queue.add(size);
                        break;
                    }
                }
                answer++;
            }
            return new int[]{answer, zeroCnt};
        }
    }

     

    - 다른 사람 풀이를 보고 이해한 후, 리팩토링 진행

    - 어제 처음으로 느꼈는데 최종 값을 구할 때는 하나씩 접근하기 보다.. 수학적으로 계산하는 접근 방법을 사용하면 좀 더 쉬운 표현이 될 것!

    - 그래도 아예 못 푸는 것보다 풀이를 했다는 점에 칭찬을 해주고 싶당~~

    class Solution {
        public int[] solution(String s) {
            
            //answer[0]: 이진 변환 횟수, answer[1]: 0 제거 개수
            int[] answer = new int[2];
            
            //s 가 1이면 중단
            int tmp = 0;
            while (!s.equals("1")) {
                answer[1] += s.length(); //s 초기 길이
                s = s.replaceAll("0", ""); //정규식으로 0 제거
                tmp = s.length(); //0이 제거된 s 길이
                
                s = Integer.toBinaryString(tmp); //이진법 진행
                
                answer[1] -= tmp; //초기 길이 - 0 제거 길이
                answer[0]++; //이진 변환 횟수
            }
            return answer;
        }
    }
    728x90
    반응형

    'Blog > TIL' 카테고리의 다른 글

    [240906] 우선 순위 큐 (PriorityQueue)  (0) 2024.09.06
    [240905] 코딩 테스트 풀이  (0) 2024.09.05
    [240626] JS 문법  (0) 2024.06.26
    [240621] 동시성 테스트, BT  (0) 2024.06.21
    [240620] ArgumentMatchers  (0) 2024.06.20

    댓글