Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- database
- db
- 인프콘2024
- 코테
- 데이터베이스
- 데이터
- 탐색알고리즘
- 코딩문제
- 수학
- 그리디알고리즘
- 백준
- 수열
- 알고리즘
- httpCode
- 소수
- 코딩테스트
- 그리디
- 기초
- 마크다운
- 그래프
- mongoDB
- 파이썬
- chatGPT
- Algorithm
- Markdown
- NoSQL
- 알고리즘기초
- 몽고DB
- 마크다운문법
- Python
Archives
- Today
- Total
Dev_from the Bottom
#6. Algorithm02_python) FizzBuzz 문제 본문
문제)
"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),
<개선사항>
- 정답 끝에 콤마(,)가 남아있음
* 콤마 없애는 것이 생각보다 간단한 문제가 아님.
* 추후 콤마 없애는 로직 스스로 고민 필요
<소회>
- 알고리즘 문제 고민하는 게 꽤 재미있음(아직까지는;;;ㅎㅎㅎ)
- 차근차근 난이도 올려보자!
'Algorithm_study' 카테고리의 다른 글
#10. Algorithm06_python) 수열 1!+2!+3!+4!+5!+...+10!의 합계 (0) | 2022.05.11 |
---|---|
#9. Algorithm05_python) 1+2+4+7+11+16+22+...의 순서로 나열되는 수열의 20번째 항까지의 합계 (0) | 2022.05.10 |
#8. Algorithm04_python) -(1/2)+(2/3)-(3/4)+(4/5)-(5/6)+(6/7) ... -(99/100)의 합계 구하기 (0) | 2022.05.09 |
#7. Algorithm03_python) 1-2+3-4+5-6+ ... +99-100의 합계 구하기 (0) | 2022.05.08 |
#5. Algorithm01_python) 1부터 100까지의 합 구하기 (0) | 2022.05.06 |
Comments