https://school.programmers.co.kr/learn/courses/30/lessons/70129
나의 풀이
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 |