Dev_from the Bottom

#6. Algorithm02_python) FizzBuzz 문제 본문

Algorithm_study

#6. Algorithm02_python) FizzBuzz 문제

고무라면 2022. 5. 7. 21:05

문제)

"1에서 100까지 숫자를 출력하는 프로그램을 만들어라.


숫자가 3으로 나누어 떨어지면, 그 숫자 대신 Fizz를, 5로 나누어 떨어지면 그 숫자 대신 Buzz를, 3과 5 모두로 나누어 떨어지면 그 숫자 대신 FizzBuzz를 출력한다."

 

문제 설명 : 영국에서 나눗셈을 배울 때 하는 어린이들의 놀이를 바탕으로 하는 문제. 임란고리(Imran Ghory)가 처음 예비 면접 문제로 제안했으며 제프 앳우드(Jeff Atwood), 조엘 스폴스키(Joel Spolsky) 같은 코더 덕분에 유명해졌다.

       - 출처 : 프로그래밍 면접 이렇게 준비한다(한빛미디어)

 

step1_밑그림 : 먼저 20까지 테스트

# 밑그림

for i in range(1, 21):
    # print(i)
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz", end=', ')
    if i % 3 == 0:
        print('Fizz', end=', ')
    if i % 5 == 0:
        print('Buzz', end=', ')
    else:
        print(i, end=', ')
        
>>>

1, 2, Fizz, 3, 4, Buzz, Fizz, 6, 7, 8, Fizz, 9, Buzz, 11, Fizz, 12, 13, 14, FizzBuzz, Fizz, Buzz, 16, 17, Fizz, 18, 19, Buzz, 

"""
<문제점> 
- 3의 배수 대신 Fizz가 나와야 하는데, Fizz 뒤에 3의 배수가 다시 등장
"""

 

step2_보완 : elif

# 보완 : 첫 if 이후의 if를 elif로 교체

for i in range(1, 21):
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz", end=', ')
    elif i % 3 == 0:
        print('Fizz', end=', ')
    elif i % 5 == 0:
        print('Buzz', end=', ')
    else:
        print(i, end=', ')
        
>>>

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz,

"""
- 의도한 대로 출력됨
"""

 

step3_보완 : 출력 양식 수정 - 괄호 안에 숫자 넣어서 헷갈리지 않게

# 출력 양식 수정 : 괄호 안에 숫자 넣어서 헷갈리지 않게

for i in range(1, 21):
    if i % 3 == 0 and i % 5 == 0:
        # print("FizzBuzz", end=', ')
        print(f'FizzBuzz({i})', end=', ')
    elif i % 3 == 0:
        # print('Fizz', end=', ')
        print(f'Fizz({i})', end=', ')
    elif i % 5 == 0:
        # print('Buzz', end=', ')
        print(f'Buzz({i})', end=', ')
    else:
        print(i, end=', ')
        
>>>

1, 2, Fizz(3), 4, Buzz(5), Fizz(6), 7, 8, Fizz(9), Buzz(10), 11, Fizz(12), 13, 14, FizzBuzz(15), 16, 17, Fizz(18), 19, Buzz(20),

"""
- 의도한 대로 출력됨
"""

 

step4_확장 : 100까지

# 100으로 확장

for i in range(1, 101):
    if i % 3 == 0 and i % 5 == 0:
        # print("FizzBuzz", end=', ')
        print(f'FizzBuzz({i})', end=', ')
    elif i % 3 == 0:
        # print('Fizz', end=', ')
        print(f'Fizz({i})', end=', ')
    elif i % 5 == 0:
        # print('Buzz', end=', ')
        print(f'Buzz({i})', end=', ')
    else:
        print(i, end=', ')
        
>>>

1, 2, Fizz(3), 4, Buzz(5), Fizz(6), 7, 8, Fizz(9), Buzz(10), 11, Fizz(12), 13, 14, FizzBuzz(15), 16, 17, Fizz(18), 19, Buzz(20), Fizz(21), 22, 23, Fizz(24), Buzz(25), 26, Fizz(27), 28, 29, FizzBuzz(30), 31, 32, Fizz(33), 34, Buzz(35), Fizz(36), 37, 38, Fizz(39), Buzz(40), 41, Fizz(42), 43, 44, FizzBuzz(45), 46, 47, Fizz(48), 49, Buzz(50), Fizz(51), 52, 53, Fizz(54), Buzz(55), 56, Fizz(57), 58, 59, FizzBuzz(60), 61, 62, Fizz(63), 64, Buzz(65), Fizz(66), 67, 68, Fizz(69), Buzz(70), 71, Fizz(72), 73, 74, FizzBuzz(75), 76, 77, Fizz(78), 79, Buzz(80), Fizz(81), 82, 83, Fizz(84), Buzz(85), 86, Fizz(87), 88, 89, FizzBuzz(90), 91, 92, Fizz(93), 94, Buzz(95), Fizz(96), 97, 98, Fizz(99), Buzz(100), 

"""
- 100까지 확장 성공
"""

step5(최종본)_출력 방식 다듬기

# 최종본

print("FizzBuzz 문제 정답 : ", end='')

for i in range(1, 101):
    if i % 3 == 0 and i % 5 == 0:
        # print("FizzBuzz", end=', ')
        print(f'FizzBuzz({i})', end=', ')
    elif i % 3 == 0:
        # print('Fizz', end=', ')
        print(f'Fizz({i})', end=', ')
    elif i % 5 == 0:
        # print('Buzz', end=', ')
        print(f'Buzz({i})', end=', ')
    else:
        print(i, end=', ')
        
>>>

FizzBuzz 문제 정답 : 1, 2, Fizz(3), 4, Buzz(5), Fizz(6), 7, 8, Fizz(9), Buzz(10), 11, Fizz(12), 13, 14, FizzBuzz(15), 16, 17, Fizz(18), 19, Buzz(20), Fizz(21), 22, 23, Fizz(24), Buzz(25), 26, Fizz(27), 28, 29, FizzBuzz(30), 31, 32, Fizz(33), 34, Buzz(35), Fizz(36), 37, 38, Fizz(39), Buzz(40), 41, Fizz(42), 43, 44, FizzBuzz(45), 46, 47, Fizz(48), 49, Buzz(50), Fizz(51), 52, 53, Fizz(54), Buzz(55), 56, Fizz(57), 58, 59, FizzBuzz(60), 61, 62, Fizz(63), 64, Buzz(65), Fizz(66), 67, 68, Fizz(69), Buzz(70), 71, Fizz(72), 73, 74, FizzBuzz(75), 76, 77, Fizz(78), 79, Buzz(80), Fizz(81), 82, 83, Fizz(84), Buzz(85), 86, Fizz(87), 88, 89, FizzBuzz(90), 91, 92, Fizz(93), 94, Buzz(95), Fizz(96), 97, 98, Fizz(99), Buzz(100),

 

<개선사항>

- 정답 끝에 콤마(,)가 남아있음

   * 콤마 없애는 것이 생각보다 간단한 문제가 아님.

   * 추후  콤마 없애는 로직 스스로 고민 필요

 

<소회>

- 알고리즘 문제 고민하는 게 꽤 재미있음(아직까지는;;;ㅎㅎㅎ)

- 차근차근 난이도 올려보자!

Comments