![[백준] 2588 - 곱셈](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJaTmx%2Fbtsytil5pHg%2FckVih2n0npkt9V3n19kMxk%2Fimg.png)
• 문제
만약 이 문제를 보고나서 어떻게 접근해야하지? 라는 생각이 든다면 가장 좋은 방법은 종이와 펜을 가지고 실제로 식을 풀어보는 것이다.
문제만 보면 막막할 수 있지만 직접 풀고나서는 생각이 달라질 수 있다.
• 풀이
차근차근 하나씩 해결해나가보자
먼저 곱할 수인 A와 B입력값 2개를 받는다.
식을 풀어보면
472 * 5
472 * 8
472 * 3 이다.
A는 고정된 값이라는 것을 알 수 있다.
B는 3 8 5를 각각 일의 자리 숫자로 구해주기만 하면된다.
이때 %(나머지) 연산자를 활용하여 값을 구해낼 수 있다.
B % 10의 값은 5이다. B값 385의 5를 구할 수 있고,
B / 10을 하면 1의자리값인 5를 제외한 38을 구할 수 있다. 여기서 다시 %10 연산자를 해주면 385의 8을 구해낼 수 있다.
마지막으로 38에서 한번더 /10을 해주면 385의 3을 구해낼 수 있다.
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();
System.out.println(A * (B%10));
System.out.println(A * (B/10%10));
System.out.println(A * (B/10/10%10));
}
}
출력결과를 보면 알 수 있듯이 각 자리에대한 곱셈값을 구해낼 순 있지만 코드의 가독성이 너무 떨어진다.
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();
int sum = 0;
int num = 0;
while(B > 0) {
num = A * (B%10);
System.out.println(num);
B /= 10;
}
System.out.println(sum);
}
}
위와같이 반복문을 사용하여 가독성을 크게 높여줄 수 있다.
num에는 A와 B의 각자리 값을 곱해주고
B의 값은 반복문을 지날때마다 /10한 값을 B에 넣어준다
B /= 10의 의미는 B = B / 10와 동일하다.
이제 각 곱셉의 합인 181720값을 구해보자.
2360, 3776, 1416 이라는 값을 프로그래밍을 통해 구해냈지만 생각해보면 실제로 이 값들 뒤에는 0들이 생략되어있다.
즉, 2360, 37760, 141600 이라는 뜻이다.
서로 상관관계의 규칙을 찾아보면
2360 * 1
3776 * 10
1416 * 100
이라는 규칙을 찾아낼 수 있다.
그러면 누적합을 뜻하는 sum변수를 선언하고, 각각의 값을 변수에 *10을 해가며 누적합을 해주면 원한는 값을 얻어낼 수 있을 것이다.
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();
int sum = 0;
int num = 0;
int temp = 1; //곱셈한 결과에 자리 수를 하나씩 증가시켜주기위한 temp변수
while(B > 0) {
num = A * (B%10);
sum += num * temp; //sum = sum + (num * temp)
System.out.println(num);
temp *= 10; //temp = temp * 10을 해준다.
B /= 10;
}
System.out.println(sum);
}
}
sum과 temp변수가 추가되었는데 sum은 곱셈한 각 값의 합을 구해주기위한 변수이고,
temp는
2360 * 1
3776 * 10
1416 * 100 에서 1, 10, 100을 의미한다.
여기서 주의할 점은 temp를 0으로 초기화해주면 처음 2360 * 0이 되버리기때문에 원하는 값을 얻어낼 수 없다.
sum은 총합이므로 반복문을 빠져나와 한 번만 출력되게 해준다.
•마무리
- 복합대입 연산자를 알게되었다.
- 처음으로 알고리즘 다운 알고리즘은 풀어본듯하다.
필자의 어휘력이 좋지않아 다른사람이 볼 때는 이해가 잘 될지 모르겠다..
쓰다보면 필력또한 발전할 거라 믿고 꾸준히 써보겠다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1330 - 두 수 비교하기 (0) | 2023.10.15 |
---|---|
[백준] 11382 - 꼬마 정민 (1) | 2023.10.14 |
[백준] 10430 - 나머지 (0) | 2023.10.13 |
[백준] 10926 - ??! (1) | 2023.10.13 |
[백준] 10869 - 사칙연산 (0) | 2023.10.13 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!