Programmers/2단계

[문자열] 이진 변환 반복하기

Snowboarder 2023. 1. 6. 13:56

https://school.programmers.co.kr/learn/courses/30/lessons/70129

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이

  • 반복을 하는데 while문을 사용하는 게 핵심이었다.
  • 반복을 할 때마다 문자열을 재초기화를 해준다.
  • 돌리면서 0이 개수를 카운트 해준다.
  • 문자열의 길이를 가지고 이진수 변환 (0b1101) 슬라이싱 필요 0b 제거

 

문제 코드

def solution(x):
    answer = [] 
    cnt = 0
    zero = 0

    while True:
        if x == '1':
            break
        zero = zero + x.count("0")
        x = x.replace("0","")
        x = bin(len(x))[2:]

        cnt +=1

    answer = [cnt, zero]

    return answer

다른 사람 풀이

def solution(s):
    a, b = 0, 0
    while s != '1':
        a += 1
        num = s.count('1')
        b += len(s) - num
        s = bin(num)[2:]
    return [a, b]
  • len(s) - len(문자열 내 1의 갯수)하면 사라질 0의 개수
def solution(s):
    from collections import Counter
    cnt, zero = 0, 0
    while s != '1':
        cnt += 1
        counter = Counter(s)
        zero += counter['0']
        s = bin(counter['1'])[2:]
    return [cnt, zero]
  •  collections 의 Counter 라이브러리 가져옴 

'Programmers > 2단계' 카테고리의 다른 글

콜라문제  (0) 2023.03.29