[programmers] Java Lv. 2 - 이진 변환 반복하기

2022. 9. 30. 17:51·Algorithm Solving/Java

문제

0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.

  1. x의 모든 0을 제거합니다.
  2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다.

예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다.

0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.


제한사항

  • s의 길이는 1 이상 150,000 이하입니다.
  • s에는 '1'이 최소 하나 이상 포함되어 있습니다.

입출력 예

 

입출력 예 설명

입출력 예 #1

  • "110010101001"이 "1"이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.

  • 3번의 이진 변환을 하는 동안 8개의 0을 제거했으므로, [3,8]을 return 해야 합니다.

 

입출력 예 #2

  • "01110"이 "1"이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.

  • 3번의 이진 변환을 하는 동안 3개의 0을 제거했으므로, [3,3]을 return 해야 합니다.

 

입출력 예 #3

  • "1111111"이 "1"이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.

  • 4번의 이진 변환을 하는 동안 1개의 0을 제거했으므로, [4,1]을 return 해야 합니다.

풀이

class Solution {
    public int[] solution(String s) {
        int[] answer = {0, 0};
        while(true){
            //0 개수 세기
            String[] sArr = s.split("");
            for(int i=0; i<sArr.length; i++){
                if(sArr[i].equals("0")) 
                    answer[1]++;
            }
            //s에서 0 제거
            s = s.replaceAll("0", "");
            //s의 길이를 2진수로 변환
            s = Integer.toBinaryString(s.length());
            answer[0]++;
            //s가 "1"이 되면 반복문 종료
            if(s.equals("1")) break;
        }
        return answer;
    }
}

아쉬운 부분

반환해야하는 값으로 제거한 0의 개수가 있어서 s를 한글자씩 배열 요소로 만들어 for문으로 0의 개수를 새는 방법을 선택했다.

풀이를 마치고 다른 사람들의 풀이를 보니 더 아름다운(?)방법이 있었다.

answer[1] += s.length();

일단 s의 길이를 저장해두고

s = s.replaceAll("0", "");
temp = s.length();

s에서 "0"을 제거한 후 s의 길이를 임시 저장해둔다.

answer[1] -= temp;

그리고 저장해 뒀던 값에서 temp값을 빼면 삭제된 "0"의 개수를 얻을 수 있다.

 

반복문을 하나 덜 썼으면 복잡도가 많이 줄었을 것이다.

풀이를 할 때 복잡도를 신경써서 풀어야겠다.

저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[programmers] Java Lv. 2 - 숫자의 표현  (0) 2022.10.19
[programmers] Java Lv. 2 - 올바른 괄호  (1) 2022.10.04
[programmers] Java Lv. 2 - 최솟값 만들기  (1) 2022.09.30
[programmers] Java Lv. 2 - JadenCase 문자열 만들기  (2) 2022.09.30
[programmers] Java Lv. 2 - 최댓값과 최솟값  (1) 2022.09.27
'Algorithm Solving/Java' 카테고리의 다른 글
  • [programmers] Java Lv. 2 - 숫자의 표현
  • [programmers] Java Lv. 2 - 올바른 괄호
  • [programmers] Java Lv. 2 - 최솟값 만들기
  • [programmers] Java Lv. 2 - JadenCase 문자열 만들기
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    Google Fonts
    javascript
    sql
    프로그래머스
    mysql
    jwt
    GROUP BY
    백준
    websocket
    Firebase
    HTML
    jpa
    그리디
    bootstrap
    BFS
    jQuery
    다이나믹프로그래밍
    java
    Subquery
    백트래킹
    CSS
    DFS
    자료구조
    join
    greedy
    완전탐색
    시뮬레이션
    programmers
    BOJ
    dp
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[programmers] Java Lv. 2 - 이진 변환 반복하기
상단으로

티스토리툴바