본문 바로가기
Programming/C

[백준/BOJ] 2588번 곱셈 (C)

by happy_jinsu 2022. 1. 18.

https://www.acmicpc.net/problem/2588

처음 이 문제를 봤을 때 상당히 꼬아서 생각을 했다. 

배열에 넣을까 다 분해해서 하드 코딩을 해볼까 고민부터 했는데, 단순한 계산이었다. 

 

먼저, 하나하나 하드 코딩한 코드이다. 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int i, j, num1, num2, sum = 0, finalSum = 0;

	//숫자 입력 받기
	scanf("%d", &num1);
	scanf("%d", &num2);

	//1 계산 하기
	sum += (num1 % 10) * (num2 % 10);
	sum += ((num1 % 100) - (num1 % 10)) * (num2 % 10);
	sum += (num1 - (num1 % 100)) * (num2 % 10);

	printf("%d\n", sum);

	finalSum += sum;
	sum = 0;

	//2 계산하기
	sum += (num1 % 10) * ((num2 % 100) / 10);
	sum += ((num1 % 100) - (num1 % 10)) * ((num2 % 100) / 10);
	sum += (num1 - (num1 % 100)) * ((num2 % 100) / 10);

	printf("%d\n", sum);
	finalSum += sum * 10;
	sum = 0;

	//3 계산하기
	sum += (num1 % 10) * ((num2 - (num2 % 100))/100);
	sum += ((num1 % 100) - (num1 % 10)) * ((num2 - (num2 % 100)) / 100);
	sum += (num1 - (num1 % 100)) * ((num2 - (num2 % 100)) / 100);

	printf("%d\n", sum);
	finalSum += sum * 100;
	printf("%d\n", finalSum);
}

이렇게 구현할 필요가 절대 없는 문제였다. 매우 매우 쉬운 문제다.

단순한 곱셈 문제이기 때문에 정말 곱해주기만 하면 된다. 

 

단순화시킨 코드는 아래와 같다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int num1, num2;

	//숫자 입력 받기
	scanf("%d", &num1);
	scanf("%d", &num2);

	// 계산 하기 -중간과정
	printf("%d\n", num1 * (num2 % 10));
	printf("%d\n", num1 * ((num2 % 100) / 10));	
	printf("%d\n", num1 * ((num2 - (num2 % 100)) / 100));
	
    //계산 하기 -결과
	printf("%d", num1 * num2);

	return 0;
}

 

 

아침에 코딩을 하니까 머리가 굳어 있어서 너무 어렵게 생각하는 것 같다.

아침에 한 문제씩 풀면서 머리를 풀어야겠다.

'Programming > C' 카테고리의 다른 글

[C언어] 재귀함수 개념 / 재귀함수 문제 & 설명  (0) 2021.08.14