문제 설명
0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다. x의 모든 0을 제거합니다. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다. 예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다. 0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.
풀이
def remover(n):
word = ''
arr, new_arr = [] , []
arr = [ i for i in n if i != '0'] # 1만 뽑아서 새로운 리스트
word_len = len(''.join(arr)) # '1111' 은 4로 반환, 길이값
new_arr = list(bin(word_len)[2:]) # bin(~~) 는 0b~~로 반환, [2:]가 필요
return len(arr), new_arr # 새로운 길이, 길이의 2진수 배열
def solution(s):
arr = list(s)
zero_cnt = 0
cnt = 0
while len(arr) != 1:
ori_num = len(arr)
n, arr = remover(arr)
zero_cnt += ori_num - n # 새로운 길이의 차이로 0 개수 반환
cnt += 1
answer = [cnt,zero_cnt]
return answer
[ i for i in range if i != 0 ] 으로 작성해서 오류가 계속 떴었다. 반복문 연산 조건문 작성할 때 str, int의 타입 확인을 해야된다
출처
https://school.programmers.co.kr/learn/courses/30/lessons/70129
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
728x90
'Programing > 프로그래머스 오답노트' 카테고리의 다른 글
숫자의 표현 (0) | 2023.09.23 |
---|---|
짝지어 제거하기 - ( 전형적인 stack 풀이 ) (0) | 2023.09.23 |
JadenCase 문자열 만들기 - (capitalize, upper, lower) (0) | 2023.09.20 |
체육복 - ( 11, 13,14,15,16 번 케이스 오류 ) (0) | 2023.09.19 |
피보나치 수열 (0) | 2023.09.18 |
댓글