https://www.acmicpc.net/problem/2588
2588번: 곱셈
첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.
www.acmicpc.net
알고리즘
1. 순서
- 첫 번째 입력으로 들어오는 정수에
- 두 번째 입력으로 들어오는 정수를 분리하여
- 각각 곱한 값을 출력 후
- 마지막에 원래 식의 최종 연산 값 출력
2. 두 번째 입력값 분리 방법
- 문자열로 입력받아 charAt() 으로 하나씩 꺼내기
- 나머지와 나눗셈 연산으로 각 자릿수 구하기
- 문자열을 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));
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 9498번 : 시험 성적 - Java (0) | 2022.02.10 |
---|---|
[백준] 1330번 : 두 수 비교하기 - Java (0) | 2022.02.09 |
[백준] 18108번 : 1998년생인 내가 태국에서는 2541년생?! - Java (0) | 2022.01.12 |
[백준] 10926번 : ??! - Java (0) | 2022.01.11 |
[백준] 10430번 : 나머지 - Java (0) | 2022.01.05 |
댓글