(Java) 백준 2588번 - 곱셈

코딩너구리·2026년 1월 12일

코딩 문제 풀이

목록 보기
152/266

https://www.acmicpc.net/problem/2588

문제

> (세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.
> (1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

접근

두 수를 입력받는다. 두번째로 입력받은 수가 세자리니까 총 3번 반복하며 일의 자리부터 분리한다.
나머지연산으로 10을 나눈 나머지를 저장하고 두번째 수를 10으로 나누기연산해서 갱신해놓는다. 그럼 반복문이 진행 될 때마다 ex)385면 5저장, 38이됨 -> 8저장, 3이됨 -> 3 저장, 0됨이다.
이제 이 저장된 수와 첫 수를 곱한값을 출력한다.

문제해결

> 두 수를 N과 M으로 입력받는다.
> 최종 결과로 쓰기 위해 rst에 미리 N과 M의 곱을 구해놓는다.
> 3자리이므로 3번 반복을 돌며 M을 10으로 나눈 나머지를 t에 저장한다. 자릿수를 뽑는 과정이다.
> 자릿수를뽑았으면 다음 자릿수를 위해 M을 10으로 나눈 몫으로 갱신한다.
> N과 t를 곱해서 각 자릿수와 계산한 값인 문제의 3,4,5를 구해 sb에 저장해준다.
> 반복문이 끝나면 sb에 미리 계산했던 N과M의 곱을 추가해주고 sb를 출력한다.

코드

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 N = Integer.parseInt(br.readLine());
        int M = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();
        int rst = N * M;
        for(int i = 0; i < 3; i++)
        {
            int t = M % 10;
            M = M / 10;
            sb.append(N * t);
            sb.append("\n");
        }
        sb.append(rst);
        System.out.print(sb);
    }
}

후기

각 자릿수를 개별로 계산해서 각각 저장할 수 있지만 3자리가 아닌 더 큰 수일 때를 위해 확장성을 고려해 반복문으로 해봤다. 이 방식으로 하니 마지막에 최종 N과 M의 곱이 M값이 0으로 갱신되어서 안나오므로 미리 구해놔야한다. 구조가 좀 기괴하긴하다.

0개의 댓글