본문 바로가기
알고리즘/백준 JAVA

[JAVA] 백준 코딩테스트 1.입출력과 사칙연산 2588: 곱셈

by 이오와이 2023. 8. 31.

곱셈을 풀어보도록 하겠습니다.

지금까지 풀어왔던 곱셈과는 조금 다른 모양일 수 있습니다.

 

정수형 A와 B가 모두 세 자릿수이며, B의 일의 자리, 십의자리, 백의자리 각각 곱한 값과 모두 곱한 값을 구하는 문제입니다.

문자열이 아닌 정수형이니 charAt()같은 매서드 없이 사칙연산으로 하나씩 쪼개며 곱하면 됩니다.

 

개념 설명

세 자리 정수를 하나씩 쪼개보도록 하겠습니다.

 

예를 들어 n의 값이 123이라고 가정합니다.

1 / 2 / 3 이렇게 각각 숫자를 하나씩 쪼개려면 나눗셈이 가장 적합해 보입니다.

 

123을 10으로 나누었을 때 나머지는 3입니다.

System.out.println(B%10); = 3(일의 자리)

 

123을 100으로 나누었을 때 몫은 1, 나머지는 23입니다.

System.out.println(B/100); = 1(백의자리)

 

나머지 23을 10으로 나누었을 때 몫은 2입니다.
System.out.println(B%100/10); = 2(십의 자리)

 

2588: 곱셈

코드로 정리해 봅니다.

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
        
        int A = sc.nextInt();
		int B = sc.nextInt();
        
        sc.close();

		System.out.println(A*(B%10));		//일의 자리
		System.out.println(A*(B%100/10));	//십의 자리
		System.out.println(A*(B/100));		//백의 자리
		System.out.println(A*B);
    }
}

십의 자리에 대한 고민이 조금 있을 수 있습니다.

처음에는 긴 풀이가 나왔어요.

System.out.println(A*((B/10)-(B/100)*10));

이렇게 작성하였는데, 비효율적이라는 생각이 들어 수정할 수 있었습니다.

System.out.println(B%100/10);

 

어떤 방법으로든 풀이는 맞으니 상관없다고 생각합니다.