1차 프로젝트 하느라 코드카타가 밀렸다. 반성하자(무슨 반성만 500번은 하는것 같다.)
양수 N을 이진법으로 바꿨을 때, 연속으로 이어지는 0 중에서 가장 큰 값을 return해 주세요.
예를 들어,
input: 9
output: 2
설명: 9의 이진수는 1001 입니다.
1과 1사이에 있는 0은 2 이므로, 2를 return
input: 529
output: 4
설명: 529의 이진수는 1000010001 입니다.
1과 1사이에 있는 연속된 0의 수는 4와 3입니다.
이 중 큰 값은 4이므로 4를 return
input: 20
output: 1
설명: 20의 이진수는 10100 입니다.
1과 1사이에 있는 연속된 0의 수는 1 뿐입니다.
(뒤에 있는 0은 1사이에 있는 것이 아니므로)
input: 15
output: 0
설명: 15의 이진수는 1111 입니다.
1과 1사이에 있는 0이 없으므로 0을 return
input: 32
output: 0
설명: 32의 이진수는 100000 입니다.
1과 1사이에 있는 0이 없으므로 0을 return
nums: 숫자 배열
target: 두 수를 더해서 나올 수 있는 합계
return: 두 수의 index를 가진 숫자 배열
일단 bin()을 사용해서 binary로 바꿔보자
def solution(N):
print(bin(N))
solution(1041)
>> 0b10000010001
여기서 필요없는 부분인 '0b'를 없애고 '1'을 기준으로 split!
def solution(N):
print(bin(N)[2:].spllit('1'))
solution(1041)
>> ['', '00000', '000', '']
오 여기서 0의 개수를 세서 최대값을 출력하면 되겠따!
def solution(N):
counts = [len(s) for s in bin(N)[2:].split('1')]
return max(counts)
solution(1041)
>> [0, 5, 3, 0]
라고 했지만 2개다 F가 뜬다..
/home/runner/Week-4-Day-1-CodeKataPythonW/test.py:9: DeprecationWarning: Please use assertEqual instead.
self.assertEquals(solution(1041),5)
..F...F
======================================================================
FAIL: test_testName2 (test.UnitTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/runner/Week-4-Day-1-CodeKataPythonW/test.py", line 19, in test_testName2
self.assertEquals(solution(32),0)
AssertionError: 5 != 0
======================================================================
FAIL: test_testName6 (test.UnitTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/runner/Week-4-Day-1-CodeKataPythonW/test.py", line 39, in test_testName6
self.assertEquals(solution(20),1)
AssertionError: 2 != 1
----------------------------------------------------------------------
Ran 7 tests in 0.001s
FAILED (failures=2)
원인은 N=4이면 100이고 split하면 ['','00'] 가 나오고 이때 최대값은 2로 측정되서 그런것이다.
배열 마지막 요소는 삭제해주자
def solution(N):
counts = [len(s) for s in bin(N)[2:].split('1')]
return max(counts[:-1])
/home/runner/Week-4-Day-1-CodeKataPythonW/test.py:9: DeprecationWarning: Please use assertEqual instead.
self.assertEquals(solution(1041),5)
.......
----------------------------------------------------------------------
Ran 7 tests in 0.001s
OK
언제봐도 기분좋은 출력이다.
끝!