Coding Test/Programmers
[Lv.2] 이진 변환 반복하기 [프로그래머스_코딩테스트] [문자열] [25분]
whawoo
2025. 7. 11. 14:42
반응형
🔍 문제 요약
https://school.programmers.co.kr/learn/courses/30/lessons/70129
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
0과 1로 이루어진 s라는 문자열이 주어지고 해당 문자열을 규칙 1. x의 모든 0을 제거한다. 2. x의 길이를 c라고 하면, c를 2진법으로 표현한 문자열로 변환.을 거쳐서 s가 1이 되는 순간까지 이진 변환의 횟수와 제거된 0의 개수를 구하는 문제
🧠 나의 접근 방식과 시행착오
15분 걸린 문제. 문제를 보면 뭔가 복잡한 느낌이 든다. 사실 그냥 보면 어려운 문제는 아니긴 하다. 일단 모든 0의 개수를 제거하는 거에서는 일단 스트링의 char에서 0과 1의 개수를 카운트 하고 1의 개수를 2진법으로 변환. 까지 했을때 2진 변환 횟수 (count)를 1 증가 시킨다. 이거를 s가 1이 될때까지 계속 반복하면 되는 일.
using System.Text;
public class Solution {
public int[] solution(string s)
{
StringBuilder sb = new StringBuilder();
int zeroCount = 0;
int count = 0;
while (!s.Equals("1"))
{
int oneCount = 0;
foreach (char c in s)
{
if (c == '1')
{
oneCount++;
}
else
{
zeroCount++;
}
}
sb.Clear();
while (oneCount > 0)
{
sb.Insert(0, oneCount % 2);
oneCount /= 2;
}
s = sb.ToString();
count++;
}
int[] answer = new int[2] {count, zeroCount};
return answer;
}
}
✅ 풀이 코드
피드백으로는 2진수 변환을 간단히 하는 방법 정도였다. 사실 2진수로 바꾸는 거에서 아래와 같은 방법이 있는 줄은 몰랐었기에 기억해두면 좋을 듯 하다.
s = Convert.ToString(oneCount, 2);
🔄 정리
Linq나 Regex등을 활용하는 풀이 방법도 존재하는 것 같긴 하다. 간결하게 풀기 위해서는 해당 방법도 있을 것이니 풀어보아도 좋을 듯 함
반응형