728x90
반응형
1. 문제 설명
2. 풀이과정
- 입력받은 문자열을 리스트로 변환한다. s = list(s)
- 전체 이진 변환 횟수를 저장해 줄 변수를 생성하고 초기화한다. count = 0
- 변환 과정에서 제거된 모든 0의 개수를 저장해 줄 변수를 생성하고 초기화한다. countZero = 0
- 원하는 시점에서 멈추기 위해 무한 반복문을 사용한다. while (True)
- 현재 변환 과정에서 제거된 0의 개수를 저장해 줄 변수를 생성하고 초기화한다. zero = 0
- 문자열 리스트의 원소를 하나씩 추출한다. for i in s
- 만약 추출한 원소가 0이면 0의 개수를 1 증가시킨다. if (1 == '0'): zero += 1
- 변환 후 문자열 길이를 저장해 줄 변수를 생성하고 현재 문자열 리스트 길이에서 현재 문자열 리스트에 있는 0의 개수를 빼주고 그 값을 대입한다. Len = len(s) - zero
- 변환 전 문자열 리스트를 초기화해 준다. s.clear()
- 문자열 길이의 값이 0이 될 때까지 반복하여 2진수로 변환한다. while (Len != 0)
- 문자열 길이를 2로 나눈 나머지를 문자열 형태로 추가한다. s.append(str(Len % 2))
- 문자열 길이를 2로 나눈 몫을 새로 저장한다. Len //= 2
- 새로운 문자열 리스트의 원소를 역순으로 바꿔준다. s.reverse()
- 변환 과정이 수행되었으므로 횟수를 1 증가시킨다. count += 1
- 변환 과정에서 제거된 0의 개수도 더해준다. countZero += zero
- 만약 새로운 문자열 리스트의 원소 개수가 1이고, 그 원소가 1이면 종료한다. if (len(s) == 1) and (s[0] == '1'): break
- 변환 과정을 정답 배열에 추가하고 answer.append(count)
- 변환 과정에서 제거된 모든 0의 개수도 정답 배열에 추가한다. answer.append(countZero)
반응형
3. 소스코드
def solution(s):
answer = []
s = list(s)
count = 0
countZero = 0
while (True):
zero = 0
for i in s:
if (i == '0'):
zero += 1
Len = len(s) - zero
s.clear()
while (Len != 0):
s.append(str(Len % 2))
Len //= 2
s.reverse()
count += 1
countZero += zero
if (len(s) == 1) and (s[0] == '1'):
break
answer.append(count)
answer.append(countZero)
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 숫자의 표현 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.06 |
---|---|
[프로그래머스] 예산 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.06 |
[프로그래머스] 이상한 문자 만들기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.06 |
[프로그래머스] 3진법 뒤집기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.04 |
[프로그래머스] 같은 숫자는 싫어 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.03 |
[프로그래머스] 올바른 괄호 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.03 |
[프로그래머스] 최솟값 만들기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.03 |
[프로그래머스] 최대공약수와 최소공배수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.07.03 |