프로그래머스_이진 변환 반복하기

LeeYulhee·2023년 9월 6일
0

💻 문제 출처 : 프로그래머스_이진 변환 반복하기

👉 내가 작성한 답


class Solution {
    public int[] solution(String s) {

        int zeroCount = 0;
        int deleteZero = 0;

        while(!s.equals("1")) {

            StringBuilder sb = new StringBuilder();

            for(char c : s.toCharArray()) {
                if(c == '0') {
                    zeroCount++;
                } else {
                    sb.append("1");
                }
            }

            s = Integer.toBinaryString(sb.length());

            deleteZero++;
        }

        return new int[]{deleteZero, zeroCount};
    }
}

📌 문제 풀이 설명

  • int 변수 zeroCount랑 deleteZero를 선언 후 0으로 초기화
  • while문으로 s가 “1”과 같지 않은 경우 순회
    • StringBuilder 생성
    • 향상된 for문으로 s를 char로 변환한 배열 순회
      • 만약 s의 요소가 0과 같다면
        • zeroCount 1 증가
      • 그게 아니라면
        • StringBuilder에 “1” 추가
    • s에 sb의 길이를 이진수로 변환한 값을 대입
    • deleteZero 1 증가
  • while문 종료 후 int 배열에 deleteZero와 zeroCount를 넣어서 return



👉 다른 사람이 작성한 답


class Solution {
    public int[] solution(String s) {
        int[] answer = new int[2];
        int temp;
        while( !s.equals("1") ) {
            answer[1] += s.length();
            s = s.replaceAll("0", "");
            temp = s.length();
            s = Integer.toBinaryString(temp);
            answer[0]++;
            answer[1] -= temp;
        }
        return answer;  
    }
}

📌 문제 풀이 설명

  • int 배열 answer를 크기 2로 생성
  • int temp 선언
  • while문으로 s가 “1”과 같지 않은 경우 순회
    • answer[1]에 s의 길이를 더함
      • answer[1]에는 0의 개수가 담겨야 함 → s의 길이를 더하고 0을 제거한 s의 길이를 빼서 0을 계산할 예정
    • s에서 “0”을 “”로 대체한 값을 s에 대입
    • s의 길이를 temp에 대입
    • s에 temp를 이진수로 변환한 값을 대입
    • answer[0]에 1 증가
    • answer[1]에 temp를 빼서 1의 개수를 뺌
  • while문 종료 후 return answer
profile
공부 중인 신입 백엔드 개발자입니다

0개의 댓글