2588번: 곱셈
첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.
www.acmicpc.net
문제
해석
문제를 보면 바로 떠올릴 수 있는 방법은 두 번째로 입력받은 수를 자릿수대로 분리해서 첫 번째로 입력받은 정수에 곱하고, 그 결과를 출력하면 될 것 같습니다.
그렇다면 우리는 두 가지를 해결할 수 있는지 생각해줘야 합니다.
두 번째 정수를 자릿수대로 분리할 수 있는가?
저는 두 가지 방법을 생각했습니다.
char, string 형 배열로 받아 정수형으로 출력하는 방법으로 char, string형 배열은 각 배열에 문자 하나를 저장하므로 385를 입력하면 각각 3,8,5이 문자형으로 받아질 것이고, 이를 숫자 아스키코드로 바꾼 후 정수형으로 출력하면 자릿수대로 분리할 수 있습니다.
두 번째 방법으로 int형 정수로 받아 '/' 연산으로 백의 자리, 십의 자리, 일의 자리의 몫으로 배열에 따로 저장하는 방법입니다.
첫 번째 방법은 나중에 이 방법으로 푸는 문제가 있으므로 이문제는 두 번째 방법으로 풀겠습니다.
- 출력해야 하는 값들을 따로 저장했다가 출력할 수 있는가? 한꺼번에 가능한가?
역시나 배열을 따로 선언한 후 그 배열에 저장하고 출력할 수 있습니다. 혹은 자릿수를 분리할 때 이미 배열을 만드므로 그 배열에 대한 출력을 해도 될 것 같습니다.
풀이
int형 정수로 받아 '/' 연산으로 백의 자리, 십의 자리, 일의 자리의 몫으로 배열에 따로 저장하는 코드입니다.
배열[0] = 정수 / 100; // 100의 자릿수
배열[1] = (정수 % 100) / 10; // 10의 자릿수
배열[2] = ((정수 % 100) % 10); // 1의 자릿수
저장된 배열을 이용해 바로 출력할 수 있습니다.
#include<iostream>
using namespace std;
int main() {
int x, y;
int a[3];
cin >> x >> y;
a[0] = y / 100;
a[1] = (y % 100) / 10;
a[2] = ((y % 100) % 10);
for (int i = 2; i >= 0; i--)
cout << a[i] * x << endl;
cout << x*y << endl;
}
여기서 for 문을 2부터 시작해 0으로 끝내는 이유는 a배열의 뒤부터 1의 자릿수이기 때문입니다.
정리
입력받은 정수를 자릿수 별로 값을 분리하는 방법을 생각하는 게 핵심인 문제입니다.
해석에서도 봤다시피 char, string 자료형으로 받아 분리하거나, int형 변수를 받아 자릿수대로 분리하는 방법 등 자릿수 분리 알고리즘은 다양하기 때문에 다 연습해 보는 것이 좋습니다.
'프로그래밍 > 코딩 테스트 연습' 카테고리의 다른 글
[백준] 10171번 : 고양이 (1단계) (C++) (1) | 2024.01.06 |
---|---|
[백준] 11382번 : 꼬마 정민 (1단계) (C++) (0) | 2024.01.06 |
[백준] 10430번 : 나머지 (1단계) (C++) (1) | 2024.01.05 |
[백준] 18108번 : 1998년생인 내가 태국에서는 2541년생?! (1단계) (C++) (1) | 2024.01.05 |
[백준] 10926번 : ??! (1단계) (C++) (0) | 2024.01.04 |