ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 백준 2588 곱셈
    Python_알고리즘 2021. 6. 24. 16:40
    문제 바로가기

       문제분석   

    # 두개의 세 자리 수를 입력 받고 곱했을 때, 곱해지는 과정에서 나오는 숫자들과 그 숫자들의 합을 구한다.

    # 정수 a와 b의 각 자리 수를 곱하고, 곱한 값들을 일의자리부터 백의자리까지 변환해주고 더한다.

    # 끝으로, 자리수를 변환한 수들을 모두 더한 값까지 최종 출력하면 된다.

     

       문제풀이   

    # 방법 1

    a = int(input())	# 정수 472
    b = list(map(int, input()))  # [3, 8, 5]
    
    one = a * b[2]
    ten = a * b[1]
    hun = a * b[0]
    
    print(one, ten, hun, sep='\n')	# 한줄씩 2360 3776 1416 출력
    print(one + ten *10 + hun * 100)	# 181720
    • 정수 a에다가 각각의 b 인덱스를 곱해주고 그 결과를 변수에 저장해서 출력한다.
    • 입력값으로 받은 b는 input함수를 통하면서 str이 되었으므로 다시 map함수를 통해 int로 바꿔서 리스트에 담아 연산이 가능하게 한다.
    • 세 수를 그냥 더하면 자릿수에 맞지 않게 더해지므로 각 자리수에 맞게 10과 100을 곱해준 후 더해서 출력한다.

     

    # 방법 2

    b = int(input())
    one = a * (b%10)
    ten = a * ((b//10)%10)
    hun = a * (b//100)
    
    print(one, ten, hun, a*b, sep='\n')
    • 곱해야하는 세자리 수 모두 정수형으로 받는다.
    • a에 b의 일의자리, 십의자리, 백의자리를 곱하는데 b는 아래와 같이 구한다.
    b = 385,

    b%10 = 5 (b를 10으로 나눈 나머지)
    (b//10)%10 = 8 (b를 10으로 나눈 몫을 다시 10으로 나눈 나머지)
    b//100 = 3 (b를 100으로 나눈 몫)

     

    # 그런데 만약, 입력값이 세자리 수가 아니라 n의 자리수라면?

     

    # 방법 3

    a = int(input())
    b = input()
    
    for i in range(len(b), 0, -1):	# 3부터 1까지 -1씩 값을 바꿔 탐색한다.
        print(a * int(b[i-1]))
    
    print(a*int(b))

    # range(start, stop, step) 함수를 이용해 for문을 작성하면 된다.

    # 입력값의 개수부터 시작해 1씩 줄어드는 역순으로 i를 넣어주면,

    # b의 마지막 인덱스는 [i-1]이고, b[i-1]은 str이므로 정수로 변환해 인덱스 역순으로 int(b[i-1]) a와 곱해준다.

    # 각 곱한 값을 굳이 리스트에 넣어서 더하지 않고, 바로 a와 b를 곱해 출력한다.

    for n in range(1, 11, 2):
        print(n, end=' ')	# 1 3 5 7 9
        
    for i in range(10, 0, -2):
        print(i, end=' ')	# 10 8 6 4 2

    # 제출했을 때, 방법 1,2,3의 메모리나 시간차이는 없는걸로 보아 내가 이해하기 쉬운 코드로 작성하면 되겠다.

     

     


       추가내용   

    # 파이썬의 출력함수인 print는 기본값으로 끝에 \n을 붙여 개행(줄바꿈)을 한다.

    # print를 여러번 작성하면 한줄에 하나씩 출력이 되는데, 이를 한줄에 모두 출력하고 싶다면 end = ' '를 사용하면 된다.

    # 한줄씩 출력
    for n in range(1, 11, 2):
        print(n)	
    # 1 
    # 3 
    # 5 
    # 7 
    # 9
    
    # 한줄에 공백을 기준으로 여러개 출력
    for n in range(1, 11, 2):
        print(n, end=' ')	# 1 3 5 7 9
    for n in range(1, 11, 2):
        print(n, end=' ')
    
    for n in range(10, 0, -2):
        print(n, end=' ')
        
    # 1 3 5 7 9 10 8 6 4 2
    # 공백을 기준으로 두 출력문이 합쳐 출력된다.

    댓글

Designed by Tistory.