js/[문제풀이] programmers

[python] 이진 표현에서 1 사이의 거리_Binary Distance

우금붕 2022. 12. 28. 15:51

[문제 설명]

0 이상의 정수 n이 주어질 때, n의 이진 표현에서 인접한 두 1 사이의 가장 긴 거리를 출력하는 함수, solution을 완성해주세요.

예를 들어, n이 주어질 때의 결과는 다음과 같습니다.

n : 5
n의 이진 표현 : 101
결과 : 2

n : 11
n의 이진 표현 : 1011
결과 : 2

 

[입력 형식]

  • n은 0 이상 109 이하의 정수입니다.

 

[출력 형식]

  • n의 이진 표현에서 인접한 두 1 사이의 가장 긴 거리를 int 형식으로 출력합니다.

 

 

[풀이]

def solution(n):
    bn = bin(n)[2:]
    cnt = 1
    result = 1

    for i in bn:
        if '1' == i:
            if result < cnt:
                result = cnt
            cnt = 1
        else:
            cnt += 1
    return result

 

[해설]

1. bin 함수를 이용하여 입력받은 숫자를 이진으로 바꾸고, slice로 맨 앞 두글자(0b)를 삭제한다.

2. count는 기본 값으로 1로 지정한다. 왜냐하면 만약 0110이라면 두 1사이의 가장 긴 거리는 1로 출력해야하기 때문이다.

3. 반복문을 사용하여 1의 위치를 통해 cnt 값을 올려 1 사이의 값을 도출한다.

 

[느낀점]

나는 가장 먼저 떠올린 반복문으로 이 문제를 해결했는데, 아래 코드와 같이 find 함수로 값을 구할 수도 있었다. python의 다양한 함수를 활용하여 코드를 더 간략화할 수 있는 방법에 대해서 생각해볼 수 있었다.

def solution(n):
    b = format(n, 'b')
    a = b.find('1')
    c = b.rfind('1')
    d = c-a-1
    return(d)

 

 

[github] - sol3

https://github.com/yh725k/python.git

 

GitHub - yh725k/python

Contribute to yh725k/python development by creating an account on GitHub.

github.com