algorithm/문제 풀이

99클럽 코테 스터디 10일차 TIL - 프로그래머스 이진 변환 반복하기

ssoheeh 2024. 4. 10. 19:56

 

 

 

내가 푼 코드

import java.util.*;
import java.io.*;

class Solution {
    
    public int[] solution(String s) {
        int[] answer = new int[2];
        Queue<String> q = new LinkedList<>();
        int changeNum = 0;
        int zeroNum = 0;
        while(!s.equals("1")){
            zeroNum += s.length()-s.replaceAll("0","").length();
            s = s.replaceAll("0","");
            int len = s.length();
            
            if(len==1) break;
            while(len>0){
                if(len%2==0){
                    q.add("0");
                    len/=2;
                    continue;
                }if(len%2==1){
                    q.add("1");
                    len/=2;
                    continue;
                }
            }
            
            int size = q.size();
            //System.out.println(size);
            s = "";
            for(int i=0;i<size;i++){
                s += q.poll();
            }
           
            changeNum++;
        }
      
        answer[0] = changeNum+1;
        answer[1] = zeroNum;
        return answer;
    }
}

자바에 정수 -> 이진변환String 메서드가 있는지 모르고 복잡하게 푼 코드

 

 

 

import java.util.*;
import java.io.*;

class Solution {
    
    public int[] solution(String s) {
        int[] answer = new int[2];
        int zeroNum = 0;
        while(s.length()>1){
            int oneCnt = 0;
            for(int i=0;i<s.length();i++){
                if(s.charAt(i)=='0')answer[1]++;
                else oneCnt++;
            }
            
            s = Integer.toBinaryString(oneCnt);
            answer[0]++;
            
        }
      
      
        return answer;
    }
}

해당 메서드 적용하면 간단하게 풀린다...!

 

 

오늘의 회고

  • 자바를 안한지 너무 오래되어서 암기하고 있는 메서드가 없지만 복잡하게라도 풀 수 있으니 풀이를 빨리 생각해내자
  • 알게된 메서드는 제대로 정리해서 내 것으로 만들 것..!
  • 내일(4/11) 학습 예정 : 스프링부트 로그인 공부, 재귀 알고리즘 정리