-
TIL. 1 FizzBuzz 공배수 출력(공배수)TIL 2020. 10. 9. 23:50728x90
# 1에서 100까지 출력
# 3의 배수는 Fizz 출력
# 5의 배수는 Buzz 출력
# 3과 5의 공배수는 FizzBuzz 출력
## FizzBuzz 문제는 프로그래밍 면접에서 자주 등장하며 경력자들도 실수하기 쉬운만큼 기초 실력을 가늠할 수 있는 문제로
## 잘 알아 두자!!!!!
## 반복문, 조건문, 나머지 연산자, 비교 연산자 모두 사용해야 풀 수 있음!!
for i in range(1, 101):
if i % 3 == 0 : # 3의 배수 일때
print('Fizz')
elif i % 5 == 0: # 5의 배수 일때
print('Buzz')
else:
print(i)
# % == 나머지 연산자
for j in range(1, 101):
if j % 3 == 0 and j % 5 ==0 : # 3의 배수 일때
print('FizzBuzz')
elif j % 3 == 0:
print('Fizz')
elif j % 5 == 0: # 5의 배수 일때
print('Buzz')
else:
print(j)
## and == 논리 연산자 사용
for k in range(1, 101):
if k % 15 ==0 : # 3과 5의 공배수 == 15 // 15의 배수 일때
print('FizzBuzz')
elif k % 3 == 0: # 3의 배수 일때
print('Fizz')
elif k % 5 == 0: # 5의 배수 일때
print('Buzz')
else:
print(k)
## 논리 연산자(and)를 쓰지 않고 3과 5의 공배수인 15를 이용해 코드를 단축시킬수 있다.
위에서 배운 FizzBuzz 코드를 단축해보자 !!!!')
# for j in range(1, 101):
# if j % 3 == 0 and j % 5 ==0 : # 3의 배수 일때
# print('FizzBuzz')
# elif j % 3 == 0:
# print('Fizz')
# elif j % 5 == 0: # 5의 배수 일때
# print('Buzz')
# else:
# print(j)
#####################################################################
# for k in range(1, 101):
# if k % 15 ==0 : # 3과 5의 공배수 == 15 // 15의 배수 일때
# print('FizzBuzz')
# elif k % 3 == 0: # 3의 배수 일때
# print('Fizz')
# elif k % 5 == 0: # 5의 배수 일때
# print('Buzz')
# else:
# print(k)
########################################################################
for i in range(1, 101):
print('Fizz' * (i % 3 ==0))
# range(1, 101) 에서 3의 배수 일때 Fizz를 출력하는 방법이다. (코드 단축)
# 여기서 ('Fizz' * (i % 3 ==0)) 은 'Fizz' * (True or False) 방법을 이용한 것이다.
# 안의 값이 True가 되면 True == 1 을 이용해 Fizz * 1 로 Fizz가 출력되며
# 안의 값이 False가 되면 Fasle == 0 을 이용해 Fizz * 0 으로 Fizz가 출력되지 않는다!!
for j in range(1, 101):
print('Buzz' * (j % 5 ==0))
# range(1, 101) 에서 5의 배수 일때 Buzz를 출력하는 방법이다. (코드 단축)
# 여기서 ('Buzz' * (i % 5 ==0)) 은 'Bzz' * (True or False) 방법을 이용한 것이다.
# 안의 값이 True가 되면 True == 1 을 이용해 Buzz * 1 로 Buzz가 출력되며
# 안의 값이 False가 되면 Fasle == 0 을 이용해 Buzz * 0 으로 Buzz가 출력되지 않는다!!
for k in range(1, 101):
print('Fizz' * (k % 3 == 0) + 'Buzz' * (k % 5 ==0) )
print('Abcd' * 4)
print('Abcd' + 'EFG')
## 여기서 keypoint
## 문자열을 곱하면 문자열이 "반복" 되고
## 문자열을 더하면 문자열이 "연결" 된다.
# 위 식도 마찬가지로 3의 배수 일때는 Fizz * True + Buzz * False로 Fizz만 출력
# 마찬가지로 5의 배수 일때 Fizz * False + Buzz * True 로 Buzz 만 출력
# 3과 5의 공배수 일 경우 Fizz * True + Buzz *True 로 FizzBuzz 출력
for p in range(1, 101):
print('Fizz' * (p % 3 == 0) + 'Buzz' * (p % 5 ==0) or p)
## 또한 3과 5의 배수가 아닐경우 빈문자열이 되는데 이때 or 연산자를 이용하면 or 앞의 식이 전부 빈 문자열이 되는데 , 빈 문자열 == False 이다.
## 따라서 False or p 에서 p 는 항상 1로 True로 p만 그대로 출력된다.
for u in range(1, 101):
print(u or 'Fizz' * (u % 3 == 0) + 'Buzz' * (u % 5 ==0))
## 만약 ~~ or u 가 아닌 u or ~~ 로 한다면 먼저 입력된 u가 항상 True로 u만 출력될 뿐 FizzBuzz는 출력되지 않는다
728x90'TIL' 카테고리의 다른 글
TIL. 5 list 함수 응용편_3 (0) 2020.10.13 TIL.4+0.5 list 함수 응용편_2 (0) 2020.10.12 TIL.4 list 함수 응용편 (0) 2020.10.12 TIL.3 turtle graphics(터틀 그래픽스)를 이용한 도형 그리기 (0) 2020.10.11 TIL .2 중첩루프를 사용한 (별출력) (0) 2020.10.10