js/[문제풀이] programmers
[python] 이진 표현에서 1 사이의 거리_Binary Distance
우금붕
2022. 12. 28. 15:51
[문제 설명]
0 이상의 정수 n이 주어질 때, n의 이진 표현에서 인접한 두 1 사이의 가장 긴 거리를 출력하는 함수, solution을 완성해주세요.
예를 들어, n이 주어질 때의 결과는 다음과 같습니다.
n : 5
n의 이진 표현 : 101
결과 : 2n : 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