본문 바로가기
코딩테스트/백준

백준 > 단계별로 풀어보기 > 입출력과 사칙연산 > 2588번: 곱셈

by 나는야석사 2024. 7. 14.

문제

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.

출력

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

예제 입력 1 복사

472
385

예제 출력 1 복사

2360
3776
1416
181720

 

a, b = map(str, input().split())
print(int(a)*int(b[-1]))
print(int(a)* int(b[-2] + '0'))
print(int(a)* int(b[-3] + '00'))

처음엔 이렇게 풀려고 했다 ㅋㅋㅋㅋㅋ 하지만 ValueError가 났다...!

바로 검색을 해서 알게 된 풀이 방법은, 몫과 나머지를 구해서 푸는 방법, for문을 이용해 푸는 방법, 리스트를 이용해 푸는 방이다.

 

몫과 나머지를 이용한 방법, for문을 이용한 방법을 잘 기억해두자!

 

몫과 나머지를 이용해 푸는 방법

a = int(input())
b = int(input())

print(a * (b%10))
print(a * ((b%100)//10))
print(a * (b//100))
print(a * b)

472 *5, 472*8, 472*3, 472*385를 각각 구해야 하는데 5, 8, 3은 일의 자리부터 백의 자리 숫자다.

a * (b % 10)

385를 10으로 나눈 나머지는 5.

a와 이것을 곱함

a * ((b % 100) // 10)

385를 100으로 나눈 나머지는 85.

85를 10으로 나누었을 때 몫은 8.

a와 이것을 곱함

a * (b // 100)

385를 100으로 나누었을 때 몫은 3.

a와 이것을 곱함

 

for문을 이용한 방법

a = int(input())
b = input()

for i in range(len(b), 0, -1):
    print(a * int(b[i-1]))
    
print(a * int(b))

len(b) = 3이므로 인덱싱을 하려면 [i-1]을 해야함 

그렇지 않으면 인덱스가 b의 범위를 벗어남

 

리스트를 사용한 방법

a = int(input())
b = input()

result = []

for i in range(len(b), 0, -1):
    result.append(a * int(b[i-1]))
    
print(result[0], result[1], result[2], sep='\n')
print(a * int(b))

 

리스트를 만들고, for문을 이용한 방법과 같이 for문에서 구한 값을 리스트에 추가해준다.

385가 거꾸로 5, 8, 3으로 돌아가고 472와 5, 8, 3 순으로 곱해진 수가 리스트에 추가된다.

sep='\n'

 을 통해서 출력되는 값들을 줄 바꿈 문자로 분리해준다.

 

print(result[0], '\n', result[1], '\n', result[2])

이 방법은 안된다. 출력 시

2360 
 3776
 1416
181720

처럼 공백이 나온다.

 

해당 방법들은 '고플래닛' 님의 https://velog.io/@goplanit/Algorithm-%EB%B0%B1%EC%A4%80-2588%EB%B2%88-%EA%B3%B1%EC%85%88%ED%8C%8C%EC%9D%B4%EC%8D%AC 을 참고했다.