코딩크리처 2024. 7. 24. 10:34

문제 제목 : 곱셈


문제

(세 자리 수) x (세 자리 수) 는 다음과 같은 과정을 통하여 이루어진다.

            4   7   2 --- (1)
        x   3   8   5 --- (2)
---------------------
        2   3   6   0 --- (3)
    3   7   7   6     --- (4)
1   4   1   6         --- (5)
---------------------
1   8   1   7   2   0 --- (6)

( 1 ) 과 ( 2 ) 위치에 들어갈 세 자리 자연수가 주어질 때,

( 3 ), ( 4 ), ( 5 ), ( 6 ) 위치에 들어갈 값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 ( 1 ) 의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 ( 2 ) 의 위치에 들어갈 세 자리 자연수가 주어진다.

출력

첫째 줄 부터 넷째 줄 까지 차례대로 ( 3 ), ( 4 ), ( 5 ), ( 6 )

에 들어갈 값을 출력한다.

예제 입력 1

472
385

예제 출력 1

2360
3776
1416
181720

이 문제는 사칙 연산 중 곱셈 의 필기 연산 과정을 이용하여 푸는 문제이다.

( 1 ), ( 2 ) 번으로 지정된 숫자는 입력될 숫자 를 의미하며,

( 3 ), ( 4 ), ( 5 ) 번으로 지정된 숫자는 계산 과정 중 발생하는 숫자 를 의미하며,

( 6 ) 번은 ( 1 ), ( 2 ) 번의 계산 결과를 의미한다.


이 문제에서 친절하게 3 자리 숫자를 2 번 입력한다고 말했다.

즉, 입력될 두 수에 대한 가변 길이는 신경쓰지 않아도 된다고 친절히 설명해 준다.

가변 길이에 대한 신경 요소와, 굉장히 긴 경우를 제외하였으므로, 반복문의 사용은 하지 않아도 된다.


콘솔 입력에 대한 내용은 이전 아티클 백준 1000 번을 참고하길 바란다.

나는 BufferedReader 클래스를 사용하므로, 취향에 맞게 입력 받으면 된다.

Answer

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int one = Integer.parseInt(br.readLine()); // ( 1 )
        int two = Integer.parseInt(br.readLine()); // ( 2 )

        // 5, 8, 3 순서로 ( 3 ), ( 4 ), ( 5 ) 결과가 나온다.
        // two 를 10으로 나눴을 때의 나머지값 
        int three = one * (two % 10); // 5
        two = two / 10; // two = 38

        int four = one * (two % 10); // 8
        two = two / 10; // two = 3;

        int five = one * (two % 10); // 3

        int six = one * two;

        System.out.println(three); // ( 3 )
        System.out.println(four); // ( 4 )
        System.out.println(five); // ( 5 )
        System.out.println(six); // ( 6 )
    }
}

곱셈의 순서는 가장 작은 수 부터 시작한다.

배열까지 원활하게 아는 상태에서는 물론 반복문과 배열을 이용하면 쉽지만,

현재 상태에서 배열과 반복문의 개념이 익숙치 않다는 것을 상정하고 문제를 풀었다.


반복문과 배열 없이 문제를 풀려면, 수의 개념 중 나머지 라는 개념을 이용하여 풀면 된다.

예를 들어, 123 이란 숫자가 있다고 가정한다.

123% 10 연산의 결과는 3 이다.

위의 연산 이후, 123 을 10으로 나눈다. 123 / 10 == 12

12% 10 연산의 결과는 2 이다.

또 다시, 12 에 10을 나눈다. 12 / 10 == 1

1% 10 결과는 1 이다.


따라서, 앞의 숫자가 아닌, 뒤의 숫자에서부터 연산이 필요 한 상황이라면,

% 10 반복을 이용하여 연산이 가능하다.

추후 다양한 알고리즘 문제를 풀 때 정말로 많이 사용되니 개념을 숙지하는 것이 중요하다.