처음 든 생각
- 문제에 나온 그대로 차근차근 단계를 밟아나가자
(1) 0 제거
(2) 남은 1의 개수만큼 이진수로 변환
(3) (1)~(2) 과정 반복
- 0을 제거할 때 하나씩 count하면 될 거고
- 이진수 변환하는 건 혹시 라이브러리나 내장함수가 있을까? -> 아니면 재귀로 해서 풀어야된다
나의 답
def solution(s):
zeros = 0
count = 0
tmp = 0
while len(s) > 1:
for i in s:
if i == "0":
zeros+=1
else:
tmp += 1
s = format(tmp,'b')
tmp = 0
count += 1
return [count , zeros]
0의 개수, 이진변환 횟수, 1의 갯수를 담을 3개의 변수를 선언하였다.
반복문은 while로 구성했고 길이가 2 이상일 때는 무한 반복하도록 했다. 만약 길이가 1이라면 0 또는 1이기에 종료조건에 다다른 것이다.
문자열을 하나씩 탐색하며 0과 1의 개수를 세어주고 format을 활용하여 이진변환을 했다.
이 과정이 한 번 끝나면 count를 1 키워주고 다시 1의 개수는 초기화시켜준다.
🟧 format 파이썬 내장함수를 활용하여 진수 변환이 가능하다.
b = format(n,'b') #Binary format
o = format(n,'o') #Octal format
x = format(n,'x') #Hexadecimal format
format은 파이썬을 처음 공부할 때 문자열 내의 값 대입할 때 사용하는 것은 봤는데 진수 변환도 가능하다는 점은 이번에 처음 알게된 내용이다. 첫 번째 인자에 정수형 값, 두 번째 인자에 2진수, 8진수, 16진수를 가리키는 알파벳 1개 문자열을 대입하면 진수가 변환된다.
다른 사람의 답
def solution(s):
a, b = 0, 0
while s != '1':
a += 1
num = s.count('1')
b += len(s) - num
s = bin(num)[2:]
return [a, b]
발상은 거의 같다.
반복문의 조건이 "1"이 아닌 것으로 조금 더 디테일하게 조건을 설정하였다.
1의 개수를 세는 방식도 for 문이 아니라 count 메서드를 통해 세었다.
여기서는 이진수 변환은 bin이라는 내장함수를 통해서 진행하였다.
>>> bin(10)
'0b1010'
bin 함수의 결과값은 0b를 포함한 문자열로 나오므로 인덱스 슬라이싱을 통해서 앞에 2개는 제거해주는 형태로 이진수 변환을 진행하였다.
format과 bin이라는 파이썬의 내장함수를 알게 되었다.
파이썬은 진짜 유용한 내장함수가 개많은 것 같다.
'스터디 > 코딩테스트' 카테고리의 다른 글
python 코딩테스트 - 프로그래머스 숫자의 표현 (0) | 2023.12.22 |
---|---|
python 코딩테스트 - 프로그래머스 다음 큰 숫자 (3) | 2023.12.05 |
python 코딩테스트 - 프로그래머스 최솟값 만들기 (2) | 2023.12.04 |
python 코딩테스트 - 2022 카카오 인턴 기출 2번 (1) | 2023.11.24 |
python 코딩 테스트 - 카카오 2022 인턴 기출 1번 (1) | 2023.11.23 |