반응형
n으로부터 정수를 입력받고 그 정수를 2진수로 변환했을 때 연속되는 1이 몇개 있는지를 구하는 유형의 문제이다.
blog.naver.com/lion85488/222099205370
Day 10: Binary Numbers
blog.naver.com
이 문제는 못풀어서 다른사람의 해답을 보고야 말았다...
#!/bin/python3
import math
import os
import random
import re
import sys
if __name__ == '__main__':
n = int(input())
binary = bin(n)[2:]
max_count = 0
temp = 0
for i in binary:
if i == '1':
temp += 1
if max_count <= temp:
max_count = temp
else:
temp = 0
print(max_count)
bin(n)을 하면 n을 2진수로 변환한다. 이때 6을 입력했다면 bin(n)은 0b110이 나온다 . 0b는 의미가 없기때문에
[2:]을 사용하여 0b가 출력되지 않게 한다.
for i in binary:를 쓰면
i가 0부터 순차적으로 증가하면서 binary[처음]에서 binart[끝] 까지 증가시킨다.
이때 binary[i]에 '1'이 있다면, temp에 1을 추가한다. 아닌경우 temp = 0 으로 전환한다.
이렇게하면 1이 연속적으로 있으면 temp에 값이 연속적으로 더해지겠지만 아니라면 0이 나온다.
만약 max_count가 temp보다 작거나 같다면
max_count는 temp가 된다. 1101이 있다고하면 0일때 temp가 0이되면 연속적인 1로 인해 temp가 2가 되었어도 0으로 지워질 가능성이 있다. 그것을 방지하기 위함이다. 그래서 미리 max_count에 값을 저장해놓는 것이다.
만약 저장된 max_count보다 더 큰 temp 값이 들어오면 그 값으로 교체할 수 있는 것이다.
'Hacker rank Challenge > python' 카테고리의 다른 글
30 Days Challenge 9일차 (0) | 2021.01.25 |
---|---|
30 Days Challenge 8일차 & python Error 정리 (0) | 2021.01.24 |
30 Days Chellenge 7일차 (0) | 2021.01.23 |
30 Days Chellenge 6일차 (0) | 2021.01.22 |
30 Days Challenge 5일차 (0) | 2021.01.21 |