728x90
반응형
💬 내가 작성한 python 코드
def solution(s):
answer = []
cnt=0; zero_cnt = 0
while int(s,2) > 1: # 문자열은 int(문자열, n진수)로 변환하여 연산할 수 있다
cnt += 1
zero_cnt += s.count('0') # 누적된 zero 갯수 세기 위함
one_cnt = s.count('1')
s.replace('0', '')
binary_str = "";
# one_cnt를 2진법으로 바꿔서 s 업데이트
while one_cnt != 0:
binary_str = str(one_cnt % 2) + binary_str
one_cnt = one_cnt // 2
s = binary_str
answer = [cnt, zero_cnt]
return answer
💬 다른 사람이 작성한 코드
def solution(s):
a, b = 0, 0
while s != '1': # string이 1이 될 때까지 반복
a += 1 # a는 변환 횟수 cnt를 위함
num = s.count('1')
b += len(s) - num # 전체 길이에서 1의 갯수를 빼면 0의 갯수를 도출할 수 있음
s = bin(num)[2:] # bin(): int 값을 이진수 문자열로 변환시켜줌 -> ex) 0b1010
return [a, b]
TIL(Today I Learned) ...
가장 먼저, python에서 제공하는 method를 잘 활용할 줄 알아야겠다는 생각을 했다.
처음 코드를 작성하고 채점해보았을 때 '시간초과'가 떴다 ...
시간 복잡도와 공간 복잡도를 줄이기 위한 코드 작성을 위해서는
python에서 제공하는 method를 적재적소에 활용할 줄 알아야 한다는 깨달음을 얻었다.
새롭게 int 값을 이진수 문자열로 변환시켜주는 bin()을 알았다.
나는 while문으로 이진수 변환을 처리했지만, bin()을 활용하면 한 줄로 작성할 수 있다.
bin()은 0b1010 이런식으로 return되기 때문에, 세번째 인덱스부터([2]) 이진수로의 변환 값을 얻을 수 있다.
또한 int(s,2)을 새로 배웠다. 문자열은 int(문자열, n진수)로 변환하여 연산할 수 있다.
728x90
'자료구조 및 알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 평균 일일 대여 요금 구하기 (SQL) (0) | 2024.04.15 |
---|---|
프로그래머스 - 조건에 맞는 도서 리스트 출력하기 (SQL) (0) | 2024.04.15 |
프로그래머스 - 둘만의 암호 (파이썬) (0) | 2024.04.11 |
프로그래머스 - 두 개 뽑아서 더하기 (파이썬) (0) | 2024.04.11 |
프로그래머스 - 수박수박수박수박수박수? (파이썬) (0) | 2024.04.08 |