728x90
반응형
문제 요약
입력받은 수 A와 B가 있다.
A와 B에서 각각 한 자리 씩 뽑아 곱한다. 가능한 모든 조합을 더한 수를 구하라.
(예를 들어, 121*34는 1*3 + 1*4 + 2*3 + 2*4 + 1*3 + 1*4 = 28)
입력
첫 행은 A와 B
주어지는 두 수는 모두 10,000자리를 넘지 않는다.
출력
첫째 줄에 결과 출력
입출력 예시
입력 | 출력 |
123 45 | 54 |
코드
오답 1
약 30분 소요
num1, num2 = input().split()
num1, num2 = list(num1), list(num2)
result = 0
for a in num1:
for b in num2:
result += int(a) * int(b)
print(result)
시간 초과
오답 2
from itertools import product
num1, num2 = input().split()
num = [list(map(int, num1)), list(map(int, num2))]
num = list(product(*num))
result = 0
for x in num:
result += x[0] * x[1]
print(result)
메모리 초과
for문을 반복해서 쓰는 게 문제인가 싶어서 itertools를 활용하여 모든 조합을 만들어준 뒤 계산했다.
정답
num1, num2 = input().split()
num1, num2 = list(map(int, num1)), list(map(int, num2))
print(sum(num1) * sum(num2))
꼭 왜 순서대로 곱해준 다음에 더해야 한다고 생각을 했을까?
더한 후 곱해주면 되는데.
다른 분의 글을 보고 깨달았다.
피드백
어느 정도 시간이 걸릴지 정도는 생각할 수 있어야 하는데.. 오랜만에 해서 그런가 머리가 너무 안 돌아갔다.
규칙을 찾으려고 하지 않고 만드는 방법(오답)은 고정되어 있고 이걸 더 빠르게 어떻게 구현하지??라고 생각하니 정답 코드가 나올 리가 없다.
사고를 좀 더 유연하게 해서 다양한 방법을 생각해보도록 노력하자.
그래도 itertools를 써본 것에 의의를 둔다.
깨달은 것
- itertools를 활용하면 list 내 원소의 모든 조합을 구할 수 있다.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[자료구조:스택] 백준 20001번 고무오리 디버깅 Python 풀이 (0) | 2021.05.14 |
---|---|
[구현] 백준 1380번 귀걸이 Python 풀이 (0) | 2021.05.11 |
[자료구조:스택] 백준 12605번 단어 순서 뒤집기 (0) | 2021.03.03 |
[자료구조:스택] 백준 10773번 제로 (0) | 2021.03.01 |
[자료구조] 백준 10828번 스택 Python 풀이 (0) | 2021.03.01 |