떵호
seongho'Dev
떵호
전체 방문자
오늘
어제
  • 분류 전체보기 (116)
    • 회고 (2)
    • Algorithm (74)
      • 프로그래머스 (65)
      • 백준(BOJ) (2)
      • Note (7)
    • 기술독서 (25)
      • Clean Code (11)
      • 자바의 정석 (8)
      • 대규모 시스템 설계 기초 (6)
    • Computer Science (1)
      • Operating System (1)
    • Typescript (1)
    • JAVA (0)
    • Spring (6)
      • JPA (6)
    • AWS (2)
    • Git (2)
    • Etc (2)

블로그 메뉴

  • github

티스토리

태그

  • 코딩테스트 준비
  • 완전탐색
  • Clean Code
  • 카카오 코테
  • 클린코드
  • JPA
  • 구현
  • 자바의 정석
  • 프로그래머스
  • 알고리즘
hELLO · Designed By 정상우.
떵호
Algorithm/프로그래머스

[JAVA 풀이] 프로그래머스 - 이진 변환 반복하기 (Level2)

[JAVA 풀이] 프로그래머스 - 이진 변환 반복하기 (Level2)
Algorithm/프로그래머스

[JAVA 풀이] 프로그래머스 - 이진 변환 반복하기 (Level2)

2022. 4. 7. 16:44
728x90

 

 

코딩테스트 연습 - 이진 변환 반복하기

 

programmers.co.kr

📝 문제 설명

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'이 최소 하나 이상 포함되어 있습니다.

🖨 입출력 예

s result
"110010101001" [3,8]
"01110" [3,3]
"1111111" [4,1]

📂 분류

구현

💡 풀이

처음 문제를 읽었을 때는 이해가 잘 되지 않았는데, 입출력 예 설명을 보고 이해했다.

이 문제는 문자열의 모든 0을 제거한 길이의 이진법이 "1"이 될 때까지의 0의 개수와 변환 과정의 횟수를 구하는 문제이다.

설계

  1. 0을 제거한 길이를 구하기 위해 0의 개수를 구하고, s의 길이에서 빼준다.
  2. 0을 제거한 길이을 이진법을 변환한다.
  3. s가 "1"이 될 때까지 1, 2를 반복하면서 0의 개수와 반복한 횟수를 카운팅 한다.

💻 코드

class Solution {

    private static int numberOfZeros = 0;
    public static int[] solution(String s) {
        int count = 0;
        while (!s.equals("1")) {
            count += 1;
            int nextNumber = s.length() - getNumberOfZeros(s);
            s = Integer.toBinaryString(nextNumber);
        }

        return new int[]{count, numberOfZeros};
    }

    private static int getNumberOfZeros(String s) {
        int ret = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '0') {
                ret += 1;
            }
        }
        numberOfZeros += ret;
        return ret;
    }
}
728x90
저작자표시 (새창열림)

'Algorithm > 프로그래머스' 카테고리의 다른 글

[Java] 프로그래머스 - 로또의 최고 순위와 최저 순위(Level 1)  (0) 2022.04.10
[Java] 프로그래머스 - 점프와 순간 이동 (Level 2)  (0) 2022.04.09
[JAVA 풀이] 프로그래머스 - 캐시 (2018 KAKAO BLIND RECRUITMENT)  (0) 2022.04.07
[JAVA 풀이] 프로그래머스 - 모음사전 (Level 2)  (0) 2022.04.06
[JAVA 풀이] 프로그래머스 - 전력망을 둘로 나누기 (Level 2)  (1) 2022.04.01
  • 📝 문제 설명
  • ⚠️ 제한사항
  • 🖨 입출력 예
  • 📂 분류
  • 💡 풀이
  • 💻 코드
'Algorithm/프로그래머스' 카테고리의 다른 글
  • [Java] 프로그래머스 - 로또의 최고 순위와 최저 순위(Level 1)
  • [Java] 프로그래머스 - 점프와 순간 이동 (Level 2)
  • [JAVA 풀이] 프로그래머스 - 캐시 (2018 KAKAO BLIND RECRUITMENT)
  • [JAVA 풀이] 프로그래머스 - 모음사전 (Level 2)
떵호
떵호

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.