[C#] 이진 변환 반복하기 (2진수변환)

2020. 12. 5. 21:29[C#] 코딩테스트 문제풀이

반응형

프로그래머스 문제

 

문제 설명

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

내 풀이

using System;
using System.Collections.Generic;

public class Solution {
    public int[] solution(string s) {
        int onecount=0;
        int zerocount=0;
        int convertcount=0;
        while(s.Length!=1)
        {
            char[] temp = s.ToCharArray();
            for(int i=0; i<temp.Length; i++)
            {
                if(temp[i]=='1')
                {
                    onecount++;
                }
                else if(temp[i]=='0')
                {
                    zerocount++;
                }
            }
            string bin = Convert.ToString(onecount,2);
            convertcount++;
            s= bin;
            onecount =0;
        }
        int[] answer = new int[]{convertcount,zerocount};
        return answer;
    }
}

느낀 점: 어려운 문제가 아닌데 오랜만에 코테 문제를 풀어서 어려웠다.

일단 핵심은 s가 1이 되는순간 2진변환 반복이 끝나야하며 s가 반복해서 변환된 이진변환수로 바뀌는 과정을 꼬이지 않고 잘 따라가면

쉽게 정답에 도출할 수 있었다.

 

하지만 기본기 부족으로 굉장히 어려웠다.

반응형