FizzBuzz 문제
7669 단어 pythonalgorithmsproductivity
Fizz
를 인쇄해야 하고, 5로 나눌 수 있는 정수를 만날 때마다 Buzz
& 및 정수가 3과 5로 나눌 수 있는 경우 "FizzBuzz"를 인쇄해야 합니다. 소프트웨어 개발자 면접에서 후보자가 실제로 코드를 작성할 수 있는지 여부를 결정하는 데 사용되는 매우 간단한 프로그래밍 작업입니다. 그것은 Imran Ghory에 의해 발명되었고 Jeff Atwood에 의해 대중화되었습니다.그래서 좋은 문제를 만드는 것은 ...
프로그래머가 작성하는 경우입니다.
def FizzBuzz():
for i in range(1, 100):
if i == 0:
continue
elif i % 15 == 0:
print('FizzBuzz')
elif i % 5 == 0:
print('Buzz')
elif i % 3 == 0:
print('Fizz')
else:
print(i)
이것은 솔루션을 인쇄하는 작업을 수행합니다. 하지만 여기에 함정이 있습니다 ...
모듈로 연산자(%)는 무거운 연산자이며 다른 방식으로 작동합니다.
i % 15
라고 말하면 i % 5 && i % 3
로 표시됩니다. 따라서 FizzBuzz 프로그램에서 i % 15
를 수행하는 경우 i % 5
작업을 두 번 수행합니다.따라서 이 문제를 해결하기 위해 일부 프로그래머는 이 문제에 다른 방식으로 접근합니다.
그들의 접근 방식은
def FizzBuzz():
f = False
d = ""
for i in range(1, 10000):
if i % 3 == 0:
d += 'Fizz'
f = True
if i % 5 == 0:
d += 'Buzz'
f = True
if f != True:
print(i)
else:
print(d)
d = ""
f = False
여기서 그들은
i % 3
& i % 5
를 한 번만 확인하고 'Fizz' & 'Buzz' 문자열을 빈 문자열에 추가합니다. 그리고 마지막에는 숫자나 마지막 문자열만 출력합니다.이 접근 방식은 처리 시간을 줄여주지만 메모리 소비를 증가시킵니다.
드문 최종 접근 방식은 ...
def FizzBuzz():
c3 = 0
c5 = 0
d = ""
b = False
for num in range(1, 10000):
c3 += 1
c5 += 1
if c3 == 3:
d += "fizz"
c3 = 0
b = True
if c5 == 5:
d += "buzz"
c5 = 0
b = True
if b == True:
print(d)
d = ""
b = False
else:
print(num)
여기 이 접근 방식에서는 (%) 모듈로 연산자가 사용되지 않습니다. 따라서 코드의 처리 시간을 줄입니다.
테스트
이 이론을 테스트하기 위해 Python 시간 함수를 구현했는데 놀랍게도. 첫 번째 코드와 마지막 코드 사이에 엄청난 시간 차이가 있었습니다.
타이밍 결과는 다음과 같습니다 ...
100개 항목의 경우
첫 번째 버전 0.0005862250000000027
두 번째 버전 0.0002485049999999961
세 번째 버전 0.001852885999999998
10000개 항목의 경우
첫 번째 버전 0.117162348
두 번째 버전 0.188121156
세 번째 버전 0.401831502
어디에서 막히면 댓글을 남겨주세요.
Twitter에서 나를 팔로우하세요.
Githubgithub/pranjaljain0에서 나를 팔로우하세요.
전체 코드를 보려면 이 요지로 이동하십시오.
해킹을 즐기세요!
Reference
이 문제에 관하여(FizzBuzz 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pranjaljain0/the-fizzbuzz-problem-5ih텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)