티스토리 뷰

[문제 링크]

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

 

프로그래머스

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

programmers.co.kr

 

[문제 고민]

  • "0"이 나올 때 count 해주고, "1"인 것을 새로운 빈 문자열에 담아서 count 진행 → count한 수를 bin()을 써서 이진 변환해보자.. 요런 컨셉으로 접근 (시간 부족 실패..안비밀..)

[핵심 개념]

  • 이진 변환 함수 bin()
  • 이진수로 구성된 문자열이라면 어차피 0과 1로 이루어져 있을테니.. 전체 문자열에서 1의 개수를 빼면 0의 개수라는 것.. → 짧은 코드의 핵심

 

[추가 끄적]

  • 실패 원인: While True로 인한 시간 복잡도 증가.. 그리고 break 조건을 잘못 걸었음 (문제를 제발 두번씩 읽자 ^^...)

[실패 코드]

def binary_loop(s):
    answer = []
    cnt = 0
    zeros = 0
    while True:
        sub_ans = ''
        for string in s:
            if string == 0:
                zeros += 1
            else:
                sub_ans += string
        c = len(sub_ans)
        s = str(bin(c)[2:])
        cnt += 1
        if c == 1:
            break
    answer.append(cnt)
    answer.append(zeros)
    return answer

 

[수정 코드]

 

def binary_loop(s):
    answer = []
    cnt = 0
    zeros = 0
    while s != "1":
        sub_ans = ''
        for string in s:
            if string == "0":
                zeros += 1
            else:
                sub_ans += string
        c = len(sub_ans)        
        s = str(bin(c)[2:])
        cnt += 1
        if s == "1":
            break
    answer.append(cnt)
    answer.append(zeros)
    return answer

[다른 사람 풀이 참고한 최종 클린 코드]

def binary_loop(s):
    cnt_binary, cnt_zero = 0, 0
    while s != '1':
        cnt_binary += 1
        num = s.count('1')
        cnt_zero += len(s) - num
        s = bin(num)[2:]
    return [cnt_binary, cnt_zero]

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함