코딩테스트

[백준] 33557 | 곱셈을 누가 이렇게 해 ㅋㅋ [파이썬/python]

사용할수없는닉네임이왜이렇게많지ㅠㅠ 2025. 5. 12. 14:29
728x90

문제

link: https://www.acmicpc.net/problem/33557

두 수 A와 B가 주어졌을 때, A×B 세로식 곱셈에서 받아올림을 하지 않고 바로 결과에 적는 잘못된 방식의 결과가 실제 곱셈 결과와 같은지를 판단하는 문제이다.

위 사진과 같이 자릿수가 같은 것끼리 곱한 후 결과를 바로 아래에 적는 식으로 숫자를 나열한다. 이것이 일반 곱셈 결과와 같으면 1, 다르면 0을 출력한다.

자릿수가 짧은 수의 자리가 비어 있는 경우(ex: 위 사진에서 천만 자리 수) 수를 그대로 적는다.

 

접근

두 수를 int가 아닌 str 형식으로 받아 한 자리씩 읽으며 곱하는 식으로 잘못된 곱셈 결과를 도출했다. 자릿수가 짧은 수는 자릿수가 긴 수와 길이가 같아지도록 앞을 1로 채워 준 후 사용한다.

자릿수가 짧은 수의 앞을 1로 채울 때는 rjust()를 사용했다. rjst(길이, 채울 문자)로 문자열을 원하는 길이만큼 늘리고, 빈 자리를 원하는 문자로 채울 수 있다.

 

코드

import sys
input = sys.stdin.readline

for _ in range(int(input())):
    A, B = input().strip().split()
    C = ''
    D = int(A)*int(B)
    if len(B) > len(A): A, B = B, A
    B = B.rjust(len(A), '1')
    for i in range(len(A)):
        C += str(int(A[i])*int(B[i]))
    if int(C) == D:
        print(1)
    else: print(0)
728x90