저번 문제에서 나눗셈의 나머지를 구하는 방법에 대해서 설명했었는데요, 학교에서도 초등학교 때 말고는 나머지를 쓸 일이 거의 없었던 것처럼 나머지를 구해서 어디에 사용할지 모르겠는 분들이 있을 겁니다. 그런데 프로그래밍의 세계 속에서는 나머지가 은근히 많이 사용된다는 걸 알고 계시나요? 우리가 생각할 때는 그냥 당연한 것들이 컴퓨터 속에서는 계산을 해야만 구현이 가능한 것들이 종종 있는데요, 이번 문제에서 그 예가 나옵니다.
드디어 입출력과 사칙연산의 마지막 문제, 곱셈(#2588)입니다! 이 문제만 끝나면 백준 1단계를 끝낼 수 있겠군요 ㅎㅎ 문제를 살펴봅시다. 곱셈을 할 때는 문제에 보이는 것과 같은 과정을 거치게 되죠. 우리는 당연하게 472 * 5, 472*8, 472*3 이렇게 받아드리지만 컴퓨터는 이 당연한 걸 이해하지 못합니다. 우리는 385라는 세 자리 숫자를 보더라도 각각 3, 8, 5로 인식할 수 있지만 컴퓨터한테는 385는 더도, 덜도 아닌 그냥 385이기 때문이죠. 그렇기 때문에 3, 8, 5로 각각 인식시키기 위해서는 따로 계산하는 과정을 거쳐야 하고, 이때 나머지를 이용하면 간단하게 계산이 가능합니다. 코드를 살펴보시죠.
#include <stdio.h>
int main(void) {
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("%d\n", a*(b%10));
printf("%d\n", a*(b/10%10));
printf("%d\n", a*(b/100));
printf("%d\n", a*b);
return 0;
}
우선은 문제에서 입력을 두 번 하라고 했기 때문에 scanf를 두 번 사용해서 숫자들을 따로 받아야 하는 점을 주의해 주세요. 그러면 바로 어떻게 나머지를 이용해서 385를 3, 8, 5로 나누는지 알아보도록 하죠.
printf("%d\n", a*(b%10));
감이 좀 오시나요? b, 즉 385를 10으로 나누고 그 나머지를 구하면 어떤 숫자가 나올까요? 385 ÷ 10은 몫이 38, 나머지가 5가 나옵니다. 그저 10으로 나누기만 했을 분인데 나머지를 구하자 우리가 필요한 5가 나왔습니다. 그러면 8은 어떻게 구할까요?
printf("%d\n", a*(b/10%10));
10의 자리 숫자는 조금 더 복잡하지만 천천히 보면 이번에도 아주 간단합니다. 385를 10으로 나누면 38이 나오고, 38을 다시 한번 10으로 나눠서 나머지를 구하면 되죠. 그럼 마지막으로 3을 구해 봅시다.
printf("%d\n", a*(b/100));
네 그렇습니다. 그냥 385를 100으로 나누면 몫으로 3이 나오죠. 참 간단하죠?
이렇게 나머지와 몫을 활용하면 숫자들을 하나 하나로 분리하는 작업을 할 수 있습니다. 이 외에도 특정 수의 배수를 찾는 등 다양한 상황 속에서 나머지와 몫을 사용하게 됩니다.
자, 이제 문제에서 요구한 대로 출력이 되도록 마저 코딩을 끝내고 테스트를 해 봅시다. 결과가 잘 나오네요.
제출을 해 봅시다! 백준에서 언어를 C로 선택한 다음 제출 버튼을 클릭해주세요.
성공!
다음 강좌는 백준 단계별 2단계인 if문으로 돌아오겠습니다 ㅎㅎ
'프로그래밍 > 백준' 카테고리의 다른 글
백준으로 배우는 C 언어 11. 윤년 (1) | 2020.03.10 |
---|---|
백준으로 배우는 C 언어 10. 두 수 비교하기 (1) | 2020.03.10 |
백준으로 배우는 C 언어 08. 사칙연산 (0) | 2020.03.09 |
백준으로 배우는 C 언어 07. A / B (1) | 2020.03.08 |
백준으로 배우는 C 언어 06. A + B (3) | 2020.03.08 |