자기계발
백준
2588 · 곱셈

백준 2588번 곱셈

문제

세 자리 자연수 두 개가 각각 한 줄에 주어진다(예: 472와 385). 세로 곱셈을 할 때 나오는 중간 값 세 개와 최종 곱을 차례로 출력한다. 472×385라면 2360, 3776, 1416, 181720이다. 중간 값은 첫 번째 수에 두 번째 수의 일, 십, 백의 자리를 차례로 곱한 것이다.

풀이

B % 10으로 일의 자리를 구해 A에 곱하고, B // 10으로 한 자리씩 줄여 가며 십의 자리, 백의 자리를 같은 방식으로 구한다. 각 중간 값을 total에 모아 두되, 자릿수가 올라갈 때마다 10과 100을 곱해 자리를 맞춘다. 마지막에는 sep='\n'으로 줄을 바꿔 한 번에 출력한다.

A = int(input())
B = int(input())
total = 0
 
s = A * (B % 10)
total += s
B = B // 10
 
s2 = A * (B % 10)
total += s2 * 10
B = B // 10
 
s3 = A * (B % 10)
total += s3 * 100
B = B // 10
 
print(s, s2, s3, total, sep = '\n')

강의에서 배운 것만으로 구성한 코드가 한 번에 통과했다. 효율적인 방식인지는 확인하지 못했다.

짚고 갈 점

  • print()의 sep은 출력할 값들 사이에 넣는 구분 문자이며 기본값은 공백이다. '\n'을 주면 값마다 줄이 바뀐다.

출처