본문 바로가기
Algorithm/Baekjoon

[백준] 2588번 : 곱셈 - Java

by unknownomad 2022. 2. 8.

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

 

2588번: 곱셈

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

www.acmicpc.net



알고리즘

1. 순서

 

  1. 첫 번째 입력으로 들어오는 정수에
  2. 두 번째 입력으로 들어오는 정수를 분리하여
  3. 각각 곱한 값을 출력 후
  4. 마지막에 원래 식의 최종 연산 값 출력

 

2. 두 번째 입력값 분리 방법

  1. 문자열로 입력받아 charAt() 으로 하나씩 꺼내기
  2. 나머지와 나눗셈 연산으로 각 자릿수 구하기
  3. 문자열을 character 배열에 한 자리씩 넣기
  • 1번(charAt()) & 3번 방법(character 배열)
    문자열로 입력받기에, 가장 마지막 출력에서는 연산을 위해 int형으로 변환해주어야 함

풀이

방법1 : charAt()

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
		
        //Scanner 통해 a는 int, b는 String으로 입력 받기
        Scanner in = new Scanner(System.in);
		
        int a = in.nextInt();
        String b = in.next();
		
        in.close();
		
        //b는 charAt()으로 각 자릿수 참조
        //charAt(): 문자열의 인덱스 위치에 있는 문자(Character)값 반환
        //***이때 반환되는 값은 아스키코드값인 문자(Char)임
        System.out.println(a * (b.charAt(2) - '0'));
        System.out.println(a * (b.charAt(1) - '0'));
        System.out.println(a * (b.charAt(0) - '0'));
        System.out.println(a * Integer.parseInt(b));
	}
}

 

charAt()

문자열의 인덱스 위치에 있는 문자(Character)값 반환
***이때 반환되는 값은 아스키코드값인 문자(Char)임

Ex)

String num = 345;
int result = num.charAt(0);

//result = 3;으로 착각할 수 있으나,
//숫자 3이 아닌, 문자의 '3'임
//아스키코드 기준, '3' = 51

//결과값: result = 51;

아스키코드

각 문자열 인덱스 참조 후 - '0' 작업을 추가하는 이유

  • 문자로 저장된 숫자가 아닌, 우리가 보는 숫자 그대로의 값을 쓰기 위함

마지막 출력

  • 두 입력값을 곱한 결과를 출력하면 되므로
  • 입력받은 문자열을 숫자로 변환해주는 Integer.parseInt()을 통해
  • 문자열을 int형으로 형변환해 a와 곱해준 값을 출력

방법2-1 : 수학적 접근

import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
    
        Scanner in = new Scanner(System.in);
 
        int a = in.nextInt();
        int b = in.nextInt();
        
        in.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);
    }
}

 

학적 접근 방식

  • b에 들어오는 입력값을 각 자릿수 별로 얻어오는 것이 핵심
    ➡ 두 번째로 입력되는 숫자인 385의 각 자릿수 값 구하기
  • 일의 자리 5의 경우
    385 % 10 = 10
    나눠준 값의 나머지인 5 반환
  • 십의 자리 8의 경우
    385 % 100 = 85
    85를 10으로 나누면 = 85 / 10 = 8 반환
  • 백의 자리 3의 경우
    385 / 100 = 3 반환

 

방법2-2 : BufferedReader

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
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 or BufferedWriter
        StringBuilder sb = new StringBuiler();
        
        sb.append(a * (b % 10));
        sb.append('\n');
		
        sb.append(a * ((b % 100) / 10));
        sb.append('\n');
        
        sb.append(a * (b / 100));
        sb.append('\n');
        
        sb.append(a * b);
 
        System.out.print(sb);
	}
}

방법3 : toCharArray()

  • 문자열을 char 배열 형태로 반환
  • 문자열을 character 배열로 변환 후 해당 배열에서 한 문자씩 꺼내 쓰는 방법
  • 문자열 길이가 가변적으로 입력되고 문자를 하나씩 참조해야할 경우, 매우 유용한 메소드 중 하나
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());
        String B = br.readLine();
 
        char[] b = B.toCharArray();

        System.out.println(a * (b[2] - '0'));
        System.out.println(a * (b[1] - '0'));
        System.out.println(a * (b[0] - '0'));
        System.out.println(a * Integer.parseInt(B));
	}
}

 


출처 : https://st-lab.tistory.com/20

댓글