[프로그래머스/Java] Lv.2 - 이진 변환 반복하기

승래·2026년 1월 30일

Lv.2 - 이진 변환 반복하기

문제 바로가기

1. 문제 요구사항

  • 입력: 0과 1로 이루어진 문자열 s.
  • 프로세스:
    1. s가 "1"이 될 때까지 아래 과정을 반복한다.
    2. s에서 모든 '0'을 제거한다. (제거된 0의 개수를 누적한다.)
    3. '0'이 제거된 나머지 문자열의 길이를 구한다.
    4. 그 길이를 2진수 문자열로 변환하여 새로운 s로 만든다.
  • 출력: [변환 횟수, 제거된 0의 총 개수]

2. 접근 방식 (Algorithm)

1) 0을 제거하는 방법 (최적화)

처음에는 StringBuilder를 사용하여 1인 경우만 append 하는 방식으로 "111..." 문자열을 직접 만들었다.
하지만 생각해보니 우리가 필요한 건 '제거된 0의 개수''남은 1의 개수(길이)' 뿐이었다.
굳이 문자열을 새로 생성할 필요 없이, 현재 문자열에서 0의 개수만 세면 해결된다.

  • 제거된 0의 개수: 반복문으로 charAt(i) == '0'인 경우 카운팅.
  • 다음 문자열의 길이: 전체 길이 - 0의 개수.

2) 이진수 변환

변환된 길이를 다시 2진수 문자열로 만들어야 한다.
직접 2로 나누며 구현할 수도 있지만, 자바의 내장 함수인 Integer.toBinaryString(int i)를 사용하면 매우 간단하게 해결할 수 있다.

3) 종료 조건

while(true) 루프를 돌며, 변환된 문자열 s"1"과 같아지면 break 한다.

3. 느낀점 & 배운점

1. 내장 함수의 중요성 (Integer.toBinaryString)

처음에는 이진 변환을 직접 구현해야 한다는 생각에 비트 연산자 등을 떠올리며 어렵게 접근했다.
하지만 검색을 통해 Integer.toBinaryString()이라는 아주 편리한 API가 있다는 것을 알았다. 코딩 테스트에서는 이런 유틸리티 함수를 적재적소에 쓰는 것도 실력임을 깨달았다. (모르면 손발이 고생한다.)

2. 문자열 조작 vs 수치 계산

초기 코드에서는 StringBuilder로 1을 일일이 갖다 붙였는데, 이는 메모리와 시간을 잡아먹는다.
문제의 본질을 파악해 보니 "실제 문자열의 모양"보다는 "길이(숫자)"가 중요했다. 문자열을 직접 뜯어고치는 대신, 0의 개수만 세어서 뺄셈을 하는 방식으로 로직을 변경하니 코드가 훨씬 간결하고 효율적으로 변했다.

3. 검색에 대한 태도

스스로 풀지 못하고 함수를 검색해서 해결했다는 점이 처음엔 아쉬웠다. 하지만 실무에서도 효율적인 라이브러리를 찾아 쓰는 능력은 필수다. 이번 기회에 진수 변환 함수를 확실히 내 것으로 만들었으니, 다음에는 검색 없이도 풀 수 있을 것이다.


Tags: #Java #Algorithm #Programmers #String #Binary

profile
힘들어도 조금만 더!

0개의 댓글