- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/70129
Lv2 문제이고, 스스로 푼 문제다!
처음에 이진법을 직접구현 하다보니 무한루프가 발생해 시간초과 에러가 났다. 그리고 매번 0을 제거하는 연산을 했는데, 그럴 필요가 없이
루프 때마다 0과 1의 갯수만 세면 된다.
이진법 직접 구하는게 어려워서 내장함수 bin()을 찾았다. bin(십진수)를 입력하면 '0b[이진수]'를 반환한다.
그래서 각 단계마다 1의 갯수를 bin()으로 이진법으로 변환한뒤 2번째 인덱스부터 s에 입력하면 된다
주의할 점:
루프가끝날 때는 1만 남은 경우이므로 1의 갯수가 1이고, 길이도 1일 때로 조건을 달아야한다
- 정답 풀이 :
def solution(s):
count, zero = 0, 0
s = list(s)
one = s.count('1')
while True:
if one == 1 and len(s) == 1:
break
zero += s.count('0')
one = s.count('1')
#one를 이진수로 바꾸고 싶다
s = bin(one)
s = s[2 : ]
count += 1
return [count, zero]
- 시도해본 풀이
아마 n이 중복돼서 무한루프에 빠졌던 것 같다
def solution(s):
count, zero = 1, 0
while s != '1':
num = list(s)
n = num.count('1')
zero += num.count('0')
s = ''
for i in range(n - 1, 0, -1):
if n % (2 ** i) == 0:
s += '1'
else:
s += '0'
count += 1
return [count, zero]
'코딩테스트 > 기출' 카테고리의 다른 글
[스택 / 프로그래머스] 12973번 : 짝지어 제거하기 (0) | 2022.09.11 |
---|---|
[ / 프로그래머스] 12981번 : 영어 끝말잇기 (0) | 2022.09.09 |
[2020 KAKAO BLIND RECRUITMENT / 프로그래머스] 60057번 : 문자열 압축 (1) | 2022.09.07 |
[Summer Winter Coding(2019) / 프로그래머스] 멀쩡한 사각형 (0) | 2022.09.06 |
[2019 KAKAO BLIND RECRUITMENT / 프로그래머스] 42888번 : 오픈 채팅방 (0) | 2022.09.06 |