티스토리 뷰

반응형

 

 문제

 

programmers.co.kr/learn/courses/30/lessons/70129

 

코딩테스트 연습 - 이진 변환 반복하기

 

programmers.co.kr

 

 

 

 

 

 

 문제 상황

 

- 문자열을 순회하며 1의 개수를 이진수로 반환하는 작업을 반복하며 입력된 수가 "1"이 될 때까지 반복된 횟수와 연산 과정에서 삭제된 0의 개수를 출력한다.

 

 

 

 

 

 

 해결 전략

- 1의 개수를 2진 변환 해주는 함수를 작성하고, 이 연산을 반복하며 횟수와 삭제된 0의 개수를 출력한다. 여기서 0의 개수는 입력된 전체 길이에서 연산 될 1의 개수를 빼주면 된다.(0의 개수를 구하기 위한 새로운 메모리 할당 필요 x)

 

 

 

 

 

 

 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def binary_transition(x: str-> list:
    num_1 = 0
    for num in x:
        if num == "1": num_1 += 1
    return [str(bin(num_1))[2:], len(x) - num_1]
 
 
def solution(s: str-> list:
    transition_cnt = 0
    total_num_0 = 0
    while s != "1":
        s, num_0 = binary_transition(s)
        total_num_0 += num_0
        transition_cnt += 1
    return [transition_cnt, total_num_0]
cs

 

 

 

 

 

 

 

 

 해설

 

- bin()은 이진수를 출력해주지만 0b가 붙어 출력되므로 [2:]로 숫자만 출력한다.

 

 

 

 

 

 

 

 새로 학습한 것 & 실수 

 

- 진법 변환시 앞에 0b, 0x 같은 dummy가 생성된다.

 

 

 

 

 

 

 

 

반응형
댓글