코딩 기록 저장소

[백준/Java] 2588번: 곱셈 본문

백준/입출력과 사칙연산 (완료)

[백준/Java] 2588번: 곱셈

KimNang 2023. 4. 12. 15:08

문제 정보

제목 : 곱셈

번호 : 2588번

사용 언어 : Java

문제 링크

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

 

2588번: 곱셈

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

www.acmicpc.net

 

시간 제한 메모리 제한
1 초 128 MB

 

문제

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

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

 

입력

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

 

출력

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

 

입출력 예제


나의 풀이

버퍼와 split()메소드를 이용해 입력받은 수를 자릿값 별로 나눠서 문자열형 배열 w에 저장합니다. 그리고 for루프를 이용해 정수형 배열인 num에 넣어줬습니다.

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String[] w = br.readLine().split("");
		int[] num1 = new int[3];
		for(int i = 0 ; i < 3; i++) {
			num1[i] = Integer.parseInt(w[i]);
		}

		w = br.readLine().split("");
		int[] num2 = new int[3];
		for(int i = 0 ; i < 3; i++) {
			num2[i] = Integer.parseInt(w[i]);
		}

 

자릿수에 접근할 2중 for루프를 생성합니다.

먼저 내부 반복문에서는 자리에 맞게 곱셈 계산을 하고 n에 저장합니다. 첫째 줄에 들어간 수의 자릿수에 따라 n*10을 할지 n*100을 할지 판단하여 값을 구하고 tmp에 저장합니다.

			for(int k = 2; k >=0; k--) {
				int n = num1[k] * num2[j];
				if( k == 1 ) {
					n *= 10;
				} else if( k == 0) {
					n *= 100;
				}
				tmp += n;
			}

내부의 반복문이 끝나면 tmp를 출력하고 둘째 줄의 자릿수에 따라 tmp*10을 할지 tmp*100을 할지 판단하여 값을 구하고, 결과 값을 출력할 변수(sum)에 tmp를 저장합니다.

		for(int j = 2; j >= 0; j--) {
			int tmp = 0;
			for(int k = 2; k >=0; k--) {
				//내부 for문이 실행됨
			}
			bw.write(tmp +"\n");
			
			if( j == 1 ) {
				tmp *= 10;
			} else if( j == 0) {
				tmp *= 100;
			}
			sum += tmp;
		}

모든 반복이 끝나면 sum을 출력합니다.

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int sum = 0;
		
		String[] w = br.readLine().split("");
		int[] num1 = new int[3];
		for(int i = 0 ; i < 3; i++) {
			num1[i] = Integer.parseInt(w[i]);
		}

		w = br.readLine().split("");
		int[] num2 = new int[3];
		for(int i = 0 ; i < 3; i++) {
			num2[i] = Integer.parseInt(w[i]);
		}
		

		for(int j = 2; j >= 0; j--) {
			int tmp = 0;
			for(int k = 2; k >=0; k--) {
				int n = num1[k] * num2[j];
				if( k == 1 ) {
					n *= 10;
				} else if( k == 0) {
					n *= 100;
				}
				tmp += n;
			}
			bw.write(tmp +"\n");
			
			if( j == 1 ) {
				tmp *= 10;
			} else if( j == 0) {
				tmp *= 100;
			}
			sum += tmp;
		}

		bw.write(sum +"\n");
		bw.flush();
		bw.close();
		br.close();
	}	

}