1225번: 이상한 곱셈
문제 )
A×B를 계산하다 지겨워진 형택이는 A×B를 새로운 방법으로 정의하려고 한다.
A에서 한 자리를 뽑고 × B에서 임의로 한 자리를 뽑아 곱한다.
의 가능한 모든 조합 (A가 n자리, B가 m자리 수라면 총 가능한 조합은 n×m개)을 더한 수로 정의하려고 한다.
예를 들어 121×34는
1×3 + 1×4 + 2×3 + 2×4 + 1×3 + 1×4 = 28
이 된다. 이러한 형택이의 곱셈 결과를 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 A와 B가 주어진다. 주어지는 두 수는 모두 10,000자리를 넘지 않는 음이 아닌 정수이다. 수가 0인 경우에는 0만 주어지며, 그 외의 경우 수는 0으로 시작하지 않는다.
출력 :
첫째 줄에 형택이의 곱셈 결과를 출력한다.
풀이)
1
2
3
4
5
6
7
8
|
nums = input().split(" ") #입력값의 리스트화, int화
answer = 0
for i in nums[0]: #문제에서 주어진 예시대로 구현
for j in nums[1]:
answer += int(i)*int(j)
print(answer)
|
cs |
하지만 이렇게 풀었더니 "시간 초과"가 발생했다. 두 수가 모두 10000자리일 경우, 경우의 수가 너무 많이 발생하기
때문인 것으로 보인다.
그래서 나온 해결책이 이항정리를 통해
1×3 + 1×4 + 2×3 + 2×4 + 1×3 + 1×4 = 28 을 정리하면,
1×(3+4)+2×(3+4)+1×(3+4)이 되므로 이를 다시 구현해보았다.
1
2
3
4
5
6
7
8
9
10
11
12
|
nums = input().split(" ")
after = 0
for i in nums[1]:
after += int(i)
answer = 0
for i in nums[0]:
answer += int(i)*after
print(answer)
|
cs |
기존의 식이 A, B가 10개씩이면 100번의 연산이 발생하는데 비해, 이 방법의 경우 20번만 반복하면 되므로
시간적 여유를 가질 수 있다.
출처 : https://www.acmicpc.net/problem/1225
1225번: 이상한 곱셈
첫째 줄에 A와 B가 주어진다. 주어지는 두 수는 모두 10,000자리를 넘지 않는 음이 아닌 정수이다. 수가 0인 경우에는 0만 주어지며, 그 외의 경우 수는 0으로 시작하지 않는다.
www.acmicpc.net
'Develop > 백준 (python)' 카테고리의 다른 글
[백준] 1436번: 영화감독 숌 (python) (0) | 2022.01.18 |
---|---|
[백준] 1773번: 폭죽쇼 (python) (0) | 2022.01.18 |
[백준] 23351번: 물 주기 (python) (0) | 2022.01.17 |
[백준] 1181번: 단어 정렬 (python) (0) | 2022.01.16 |
[백준] 11050번: 이항 계수 1 (python) (0) | 2022.01.16 |