Just Do IT!
[백준 Bronze III] 곱셈 - 2588 (Java) 본문
간단해보이지만, 생각해볼 것들이 은근 있다.
문제를 푼 다음에 찾아보니까 세 가지 방법으로 풀 수 있다고 해서 정리해보려고 한다.
내가 푼 방법 (나머지 및 나눗셈 연산을 통해 각 자릿수를 구하여 출력하는 방법)
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);
}
}
B에 들어오는 입력값을 각 자릿수별로 나눠서 얻어온다. 그 이후에 계산한다.
예를 들어,
일의 자리가 5인 경우는 385%10 => 나머지가 5이므로 5가 반환된다.
십의 자리는 385%100을 해주고 나머지 85가 반환되면 다시 85/10을 해주어 몫인 8을 구하면 된다.
이런식으로 각 자릿수를 반환하여 계산해주면 테스트 케이스를 잘 통과하는 걸 알 수 있다.
다른 방법 1. 문자열로 입력받고 charAt()를 사용하는 방법
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
String B = sc.next();
sc.close();
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));
}
}
B를 String으로 입력받아 charAt()으로 각 자릿수를 참조해주는 방법이다.
문자열의 인덱스 위치에 있는 문자값을 반환해주는 것이다. 그게 바로 각 자릿수이니까.
각각 문자열 인덱스를 참조한 뒤에 -'0'을 해주는 이유는,
문자로 저장된 숫자가 아니라 숫자 그대로의 값을 쓰기 위해서이다.
마지막에 출력은 입력받은 문자열을 숫자열로 바꿔주기 위해 Integer.parseInt()를 사용한다.
다른 방법 2. 문자열로 입력받으면서 char 배열에 담아주는 방법
검색을 통해 알아본 방법인데, 이런 방법으로 푼 사람들은 별로 없는 것 같긴 하다.
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));
}
}
toCharArray()라는 문자열을 char 형태로 반환해주는 메소드를 이용한다.
이 메소드로 char 배열을 만들어준 뒤 하나씩 배열에서 꺼내쓰는 방법이다. 위의 방법과 비슷하다.
그리고 Scanner로 입력받는 것보다 BufferReader로 입력받는 것이 성능이 좋다고 한다.
그래서 이 방법을 사용하는 듯 한데 아직 거기까지는 안 배워서...ㅋㅋㅋ 우선은 그걸 적어본다.
자바 강의를 들으면서 입/출력 문제를 풀어보는데 확실히 문법이 너무 오랜만이고 헷갈리긴 한다.
이런 문제들을 풀어보면서 기초를 조금 더 열심히 해야겠다...!
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준 Bronze II] 상수 - 2908 (Java) (0) | 2024.07.19 |
---|---|
[백준 Bronze II] 단어의 개수 (Java) (0) | 2024.07.19 |
[백준 Gold V] 계란으로 계란치기 - 16987 (1) | 2024.02.13 |
[백준 Gold IV] 알고스팟 - 1261 (python) (1) | 2024.02.01 |
[백준 Bronze V] 2739. 구구단 (Python) (0) | 2023.06.13 |