티스토리 뷰
[문제 링크]
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]
'Tech Stacks, Concepts > Algorithm' 카테고리의 다른 글
[프로그래머스] Lv2. 멀리 뛰기 (파이썬) (0) | 2023.05.01 |
---|---|
[프로그래머스] Lv1. 두 개 뽑아서 더하기 (파이썬) (1) | 2023.04.16 |
[프로그래머스] Lv2. 최솟값 만들기 (파이썬) (0) | 2023.04.15 |
[프로그래머스] Lv2. 올바른 괄호 (파이썬) / Stack (스택) (0) | 2023.04.14 |
[프로그래머스] Lv1. 크기가 작은 부분문자열 (1) | 2023.04.14 |
댓글