happyso
study with happyso
happyso
전체 방문자
오늘
어제
  • 분류 전체보기 (300)
    • GIT (3)
    • 컴퓨터 기본 개념 (29)
    • 알고리즘 (125)
      • 알고리즘 문제 (115)
      • 알고리즘 개념 (10)
    • Go (2)
    • 클라우드 (53)
      • DevOps (3)
      • Kubernetes(쿠버네티스) (33)
      • AWS (6)
      • CKA (8)
    • 리눅스(Linux) (18)
      • 컨테이너(Container) (8)
    • Front (22)
      • JavaScript (2)
      • React (20)
    • Python (21)
      • Python 웹 크롤링 (11)
      • Django (7)
      • MachineLearning (3)
    • 데이터베이스 (6)
      • MariaDB (2)
      • MongoDB (4)
    • C언어 (5)
    • Trouble Shooting (2)
    • 네트워크 (8)
      • CCNA (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • kubernetes
  • apply
  • Patch
  • 18
  • replace
  • 15
  • edit

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
happyso

study with happyso

알고리즘/알고리즘 문제

[python] 프로그래머스 > 이진변환반복하기

2023. 5. 18. 10:37

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

 

프로그래머스

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

programmers.co.kr

나의 풀이

def removeZero(val):
    removedZeroCnt = 0
    for i in val:
        if i == '0':
            removedZeroCnt += 1
    return removedZeroCnt, ''.join(val).replace('0', '')

def transform(val):
    namosi = []
    while val != 1:
        rest = val % 2
        val = val // 2
        namosi.append(str(rest))
    namosi.append('1')
    namosi.reverse()
    return namosi

def solution(s):
    answer = []
    zeroCnt = 0
    transCnt = 0
    listedVal = list(s)
    while listedVal:
        # 0 제거
        removedZeroCnt, val = removeZero(listedVal)
        zeroCnt += removedZeroCnt
        # 이진 변환
        listedVal = transform(len(val))
        transCnt += 1
        if len(listedVal) == 1 and listedVal[0] == "1":
            break
    answer.append(transCnt)
    answer.append(zeroCnt)
    return answer

나의 풀이 (다른 사람 풀이 참조)

def solution(s):
    zeroCnt = 0
    transCnt = 0
    while True:
        if s == '1':
            break
        # 0 제거
        removedZero = s.count('1')
        zeroCnt += len(s) - removedZero
        # 이진 변환
        s = bin(removedZero)[2:]
        transCnt += 1
    return [transCnt, zeroCnt]

다른 사람 풀이

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 = cnt + 1
    answer = [cnt, zero]
    return answer

후기

  • 나의 풀이는 풀면서도 코드가 너무 지저분하다고 느꼈다.
  • 해당 알고리즘은 어떤 자료구조에 해당되는지 모르겠다고 생각했다.
  • 다른 사람의 풀이를 보고 나니, 내가 python의 도움되는 함수들을 더 익혀야 겠다고 느꼈다. count, bin 등 자동으로 이진수를 계산해주는 것이 있는지도 몰랐다. count함수와 bin함수가 존재한다는걸 모르니 직접 함수를 구현하면서 시간도 더 오래걸렸다.
저작자표시 비영리

'알고리즘 > 알고리즘 문제' 카테고리의 다른 글

[python] 프로그래머스 > 마법의 엘리베이터  (0) 2023.05.25
[python] 프로그래머스 > H-index  (0) 2023.05.23
[python] 프로그래머스 > 뒤에 있는 큰 수 찾기  (0) 2023.05.18
[python] 백준 > 그리디 > 회의실 배정(1931)  (0) 2021.03.30
[python] 백준 > BFS > 토마토(7576)  (0) 2021.03.22
    '알고리즘/알고리즘 문제' 카테고리의 다른 글
    • [python] 프로그래머스 > 마법의 엘리베이터
    • [python] 프로그래머스 > H-index
    • [python] 프로그래머스 > 뒤에 있는 큰 수 찾기
    • [python] 백준 > 그리디 > 회의실 배정(1931)
    happyso
    happyso

    티스토리툴바