반응형
곱셈
- 문제
(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.
(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.
- 입력
첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.
- 출력
첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.
-예제 입출력
- 소스코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N1 = sc.nextInt();
String S1 = sc.next();
sc.close();
System.out.println(N1 * (S1.charAt(2) - '0'));
System.out.println(N1 * (S1.charAt(1) - '0'));
System.out.println(N1 * (S1.charAt(0) - '0'));
System.out.println(N1 * Integer.parseInt(S1));
}
}
- 틀린 포인트
이 문제를 풀이하는 방법을 크게 2가지가 있다.
첫번째 방법은 charAt()을 이용하여 각 자리를 하나씩 꺼내서 곱할 때는 꼭 - '0' 을 해야한다.
- '0'을 하는 이유는 우리가 보는 숫자 그대로의 값을 쓰기 위한 것이라고 한다.
참고: https://st-lab.tistory.com/20
두번째 방법은 나머지와 나눗셈 연산을 통해 각 자리수를 구하는 방법이다.
아래는 각 자리수를 구하는 공식이다.
1의자리: n%10 10의 자리: n%100 / 10 100의 자리: n%1000 / 100 1000의 자리: n%10000 / 1000 10000의 자리: n/10000 |
아래는 내가 위의 방법을 알지 못하고 열심히 짠 코드이다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int A;
Scanner sc = new Scanner(System.in);
A = sc.nextInt();
Scanner sc2 = new Scanner(System.in);
String B;
B = sc2.nextLine();
String str = B;
int C = Integer.parseInt(B);
char c1 = str.charAt(2);
char c2 = str.charAt(1);
char c3 = str.charAt(0);
int num = Character.getNumericValue(c1);
int num2 = Character.getNumericValue(c2);
int num3 = Character.getNumericValue(c3);
System.out.println(num * A);
System.out.println(num2 * A);
System.out.println(num3 * A);
System.out.println(C * A);
}
}
사실 이클립스에서 실행하면 정답으로 나오긴한다.
하지만 백준 알고리즘에서 실행하면 런타임 에러(NoSuchElement)가 뜬다.
알고리즘을 공부하는 방법이 효율적인 소스코드를 작성하기 위해서이기 때문에, 앞으로 일/십/백/천의 자리를 구할 때는 위의 효율적인 방법을 이용하기로 했다.
반응형
'JAVA > algorithm' 카테고리의 다른 글
[백준] - 알람 시계 맞았는데, 틀렸습니다 나올 때 확인해야 할 것(JAVA) (0) | 2021.08.28 |
---|---|
[백준] - 단계별로 풀어보기 - 함수(JAVA) (0) | 2021.05.23 |
[백준] - 두 수 비교, 시험 성적, 윤년, 사분면 (JAVA) (0) | 2021.05.05 |
[백준] - 기본 사용법 및 Hello World/We love kriii/고양이/개 (JAVA) (0) | 2021.05.05 |
댓글