ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL. 1 FizzBuzz 공배수 출력(공배수)
    TIL 2020. 10. 9. 23:50
    728x90

    # 1에서 100까지 출력

    # 3의 배수는 Fizz 출력

    # 5의 배수는 Buzz 출력

    # 3과 5의 공배수는 FizzBuzz 출력

     

    ## FizzBuzz 문제는 프로그래밍 면접에서 자주 등장하며 경력자들도 실수하기 쉬운만큼 기초 실력을 가늠할 수 있는 문제로

    ## 잘 알아 두자!!!!!

    ## 반복문, 조건문, 나머지 연산자, 비교 연산자 모두 사용해야 풀 수 있음!!


    for i in range(1101):

        if i % 3 == 0 : # 3의 배수 일때

            print('Fizz')

        elif i % 5 == 0# 5의 배수 일때

            print('Buzz')

        else:

            print(i)

     

    # % == 나머지 연산자


    for j in range(1101):

        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(1101):

        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(1101):

        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(1101):

        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(1101):

        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(1101):

        print('Fizz' * (p % 3 == 0) + 'Buzz' * (p % 5 ==0or p)

     

    ## 또한 3과 5의 배수가 아닐경우 빈문자열이 되는데 이때 or 연산자를 이용하면 or 앞의 식이 전부 빈 문자열이 되는데 , 빈 문자열 == False 이다.

    ## 따라서 False or p 에서 p 는 항상 1로 True로 p만 그대로 출력된다.


    for u in range(1101):

        print(u or 'Fizz' * (u % 3 == 0) + 'Buzz' * (u % 5 ==0))

     

    ## 만약 ~~ or u 가 아닌  u or ~~ 로 한다면 먼저 입력된 u가 항상 True로 u만 출력될 뿐 FizzBuzz는 출력되지 않는다 


     

    728x90
Designed by Tistory.