백준 알고리즘/입출력

백준 2588번 :: 곱셈

Sun720 2022. 5. 15. 23:49

▶ 문제

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

 

2588번: 곱셈

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

www.acmicpc.net

 설명

곱셈 과정까지도 출력을 해야하는 문제이다.

수학적으로 풀 수도 있고, 문자열 메소드를 이용해서 풀 수도 있다.

 

한번에 해결할 수 없어서 다른 테스트 코드를 참고했다. 약간 나에겐 까다로운 문제였다.

 

문제 풀이

🌱 풀이1. 수학적으로 풀기

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

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int a = Integer.parseInt(br.readLine());
        int b = Integer.parseInt(br.readLine());
		
        br.close();
        
		StringBuilder sb = new StringBuilder();
		
		sb.append(a*(b%10)+"\n");
		sb.append(a*((b%100)/10)+"\n");
		sb.append(a*(b/100)+"\n");
		sb.append(a*b);
		
		System.out.println(sb);
    }
}

두번째로 입력받은 값의 자릿수 순서대로 첫번째 입력값과 곱하기를 진행하도록 한다.

예를 들어 472, 385라는 숫자를 입력받았다면,

출력 첫 줄엔 472*5, 둘째 줄엔 472*8, 셋째 줄엔 472*3이 와야 한다.

두번째 입력 값인 385의 1의자리, 10의 자리, 100의 자리를 각각 구하면

나머지는 쉽게 연산을 통해 구하고자 하는 출력 결과를 얻을 수 있다.

 

sb.append의 첫 주자는 a*(b%10) 으로 되어 있는데,

385의 첫째자리 수 5는 385를 10으로 나눴을 때 나머지 값이기 때문이다.

 

385의 둘째자리를 구하려면 385를 100으로 나눈 나머지 값인 85를 가지고 10으로 한 번 나눠주면 된다.

그래서 두번째 sb.append 의 인수로 a*((b%100)/10 가 올 수 있었던 것이다.

 

385의 100의 자리를 구하는 것도 385를 100으로 나누면 된다.

 

 

알고나면 단순한 원리인데 처음에 생각해내지 못한 게 그만큼 아쉬웠다.

 

🌱 풀이2. substring(int a, int b)

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

public class Main {

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

		String text = br.readLine();
		int A = Integer.parseInt(text);

		String texts = br.readLine();
		int one = Integer.parseInt(texts.substring(2, 3));
		int two = Integer.parseInt(texts.substring(1, 2));
		int three = Integer.parseInt(texts.substring(0, 1));

		StringBuilder sb = new StringBuilder();
        
        sb.append((A * one)+"\n");
        sb.append((A * two)+"\n");
        sb.append((A * three)+"\n");
        sb.append(A * Integer.parseInt(texts));
        
        System.out.println(sb);
	}

}

 

 

 

 

Log

728x90
반응형