1225번: 이상한 곱셈
첫째 줄에 A와 B가 주어진다. 주어지는 두 수는 모두 10,000자리를 넘지 않는다.
www.acmicpc.net
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자리를 넘지 않는다.
첫째 줄에 형택이의 곱셈 결과를 출력한다.
입력 1
123 45
출력 1
54
a,b = input().split()
sum = 0
for i in range(len(a)):
for j in range(len(b)):
sum += int(a[i])*int(b[j])
print(sum)
확실히 코드를 짜면서도 for문을 너무 많이 사용하는 것 같아서 효율적이지 못하다고 생각했다.
그래서 뭔가 시간 초과가 날 것 같았더니... 결국 빨간 줄이 생겼다.
a, b = input().split()
a, b = list(map(int, a)), list(map(int, b))
print(sum(a) * sum(b))
이래저래 고민을 해보다가 다른 분들의 풀이를 보니 일일히 곱해주는 것이 아닌
숫자를 더한 후 곱셈을 하는 방법도 있다는 것을 알게 되었다.
문제를 풀이하는데 있어서 늘 하던대로 생각하고 풀이하다보니 그 틀에 갇히는 것 같다는 생각이 들었다.
오랜만에 문제를 풀이하다보니 비교적으로 만만해 보이는 친구를 골랐었는데..
다시 천천히 알고리즘 문제를 풀어가며 난이도를 높여야지.. 익숙해지도록 해야겠다.
[백준/Python] 4796 : 캠핑 (0) | 2021.10.21 |
---|---|
[백준/Python] 2839 : 설탕 배달 (0) | 2021.09.15 |
[백준/Python] 11720 : 숫자의 합 (2) | 2021.07.26 |
[백준/Python] 1547 : 나머지 (0) | 2021.07.20 |
[백준/Python] 14490 : 백대열 (0) | 2021.07.12 |
댓글 영역