본문 바로가기
JAVA/algorithm

[백준] - 각자리 수 곱셈, 일/십/백의 자리 구하기 (JAVA)

by 개폰지밥 2021. 8. 28.
반응형

곱셈

- 문제

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(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)가 뜬다. 

알고리즘을 공부하는 방법이 효율적인 소스코드를 작성하기 위해서이기 때문에, 앞으로 일/십/백/천의 자리를 구할 때는 위의 효율적인 방법을 이용하기로 했다.

반응형

댓글