Hacker rank Challenge/python

30 Days Challenge 10일차

반응형

 

 

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