문제 링크
https://programmers.co.kr/learn/courses/30/lessons/70129
코딩테스트 연습 - 이진 변환 반복하기
programmers.co.kr
풀이
- 0을 제거해줄 때 while 문 때문에 시간초과가 발생하였다.
# 시간 초과 코드
def solution(s):
cnt = 0
zero = 0
while True :
# 1이면 중단
if s == '1':
return (cnt, zero)
# 정수형 리스트로 변환
t = list(map(int, s))
# 0 제거
while True :
if 0 in t:
t.remove(0)
# 제거된 0의 개수 세기
zero += 1
else:
break
# 길이 이진 변환
s = bin(len(t))
# 앞에 0x 제거
s = str(s[2:])
# 변환 횟수 + 1
cnt += 1
cnt = 변환 횟수, zero = 제거된 0의 개수
while 문 반복
- s가 '1'이면 변환 횟수와 제거된 0의 개수 반환
1. s의 한 글자씩 정수형으로 변환하여 list 생성 : t
2. 0의 개수 더하기
3. t에서 0 제거
4. 남은 t의 길이를 이진 변환
5. 이진 변환 시 앞에 0x가 붙으므로 이를 제거해주고 s 갱신, cnt + 1
def solution(s):
cnt = 0
zero = 0
while True :
# 1이면 결과값 리턴
if s == '1':
return (cnt, zero)
# 정수형 리스트로 변환
t = list(map(int, s))
# 0의 개수
zero += t.count(0)
# 0 제거
t = [ i for i in t if i not in {0} ]
# 길이 이진수 변환
s = bin(len(t))
s = str(s[2:])
cnt += 1
생각해보니 1의 개수를 이진 변환하는 것과 같으므로 굳이 t에서 0을 제거해줄 필요가 없다.
따라서 t에서 1의 개수를 이진 변환
def solution(s):
cnt = 0
zero = 0
while True :
if s == '1':
return (cnt, zero)
t = list(map(int, s))
zero += t.count(0)
# 1의 개수 이진수 변환
s = bin(t.count(1))
s = str(s[2:])
cnt += 1
'개발 > algorithm' 카테고리의 다른 글
[프로그래머스][level2] 방금그곡 - python (0) | 2022.04.11 |
---|---|
[프로그래머스][level2] N개의 최소공배수 - python (0) | 2022.04.11 |
[프로그래머스][level2] [1차] 뉴스 클러스터링 - python (0) | 2022.04.11 |
[프로그래머스][level2] 예상 대진표 - python (0) | 2022.04.11 |
[프로그래머스][level2] 최솟값 만들기 - python (0) | 2022.04.08 |