https://www.acmicpc.net/problem/14623
a=list(input())
b=list(input())
se=[0]*(len(a)+len(b))
for i in range(len(b)):
for j in range(len(a)):
se[i+j+1]+=int(a[j])*int(b[i])
t=0
for i in range(len(se)-1,-1,-1):
se[i]+=t
if se[i]>1:
a=se[i]
se[i]=se[i]%2
t=a//2
else:
t=0
while se[0]==0:
se.pop(0)
print(''.join(map(str,se)))
solved.ac기준 브론즈4 문젠데 오래걸렸다.
우선 2진수의 곱셈이 어떻게 이뤄지는지 정확히 기억이 나지않았다.
구글을 찾아보았고 10진수와 다르지 않은 방식으로 곱셈을 하면 되었다.
곱하는 방법은 알지만 어떻게 구현을 할까 고민했다.
일의자리,,십의자리,,백의자리,,,,,등 순서대로 곱한후 곱한값을 더하는 과정에서
1을 넘어가면 2로 나누어 나머지를 리스트에 삽입하고 몫은 변수에 저장했다가 다음반복때 나워질 리스트 요소에 더했다.
그런데 두번이나 틀렸습니다가 떴다.
첫번째는 앞에 의미없는 0이 없어야 한다는 조건을 만족시키지 못했던것이고,
두번째는 1을 넘어가지 않으면 변수에 저장한값을 0으로 다시 초기화해줘야한다는 것을 인지하지 못했다.
고민하고 해결했다!
몰랐던 개념:
이진수의 곱셈
'Koala - 5기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/C++] 16955번 오목, 이길 수 있을까? (0) | 2022.02.15 |
---|---|
[백준/python] 15649: N과 M(1) (0) | 2022.02.15 |
[백준/python] - 15905번: 스텔라(STELLA)가 치킨을 선물했어요 (0) | 2022.02.14 |
[백준/c++] 1100 하얀 칸 (0) | 2022.02.14 |
[백준/python] 5533번 유니크 (0) | 2022.02.14 |