문제
이번주차 우리 동아리의 연습문제이다. 보기에는 쉬워보이지만 막상 코딩하려하니 조금 시간이 걸렸던..(나만 그럴수도 ㅎㅎ) 초보개발자라 그런지 머리속에 있는 생각을 그대로 구현해내지를 못해서 답답하고 억울한(?) 시간이였다. 그래도 마지막에는 내가 생각했던대로 구현할 수 있어서 뿌듯한 문제기도 했다.
학습
처음에 보고 꽤 재미있는 문제라고 생각했다. 우선적으로 들었던 생각은 세자리 수를 각각의 자릿수로 분리해서 배열에 저장한다음 곱셈의 원리에 따라 다시 더해주어서 마지막 합에 저장하면 어떨까 싶었다. 그러나 마음처럼 잘 되지 않았고 , 그 이유는 함수 div를 선언하여 배열 자체를 넘겨주고 싶었는데 그러면 포인터를 써야 한다는 생각에 지레 겁을 먹었기 때문이다. 그 다음 시도했던 방법은 그냥 정수를 자릿수로 나누어 화면에 찍어주는 방식이였다. (코드 1)
이렇게 단순화 시켜 과제를 완료했지만 뭔가 허전해서 내가 원래 하려고 했던 방식도 한번 도전해보기로 했다. 우선 두 세자리 정수를 입력받고 div함수에서 각 자리수를 나누어 배열에 저장시킨다. 배열을 넘겨주는거라 포인터 개념이 사용되어 망설였지만 그냥 매개변수로 선언하고 넘겨주면 되더라..!!! 몇번 테스트 코드를 작성하면서도 이게 왜 되지..? 싶었다. ㅋㅋㅋ 포인터..! 별거 아니구만 ㅎㅎ
무튼 포인터로 넘겨준 다음 for반복문을 통해 문제의 (3) (4) (5)부분을 더해주고 찍어주면 완성 ! 코드1로도 과제를 완료한 것이기 때문에 넘어갈 수 있었지만 그래도 처음 생각했던 코드를 구현해냈다는 게 뿌듯하고 스스로 포인터를 활용해보았다는 점이 나를 행복하게 만들었다. (물론 코드1에 비해 코드2가 비효율적인 코드인건 인정한다 ;ㅁ;)
아! 그리고 pow의 원형을 찾아보다가 알게된 건데 double pow(double x,double y)라는 점! 무심코 int형을 썻다가 Error가 발생하길래 (int)로 강제 형변환 시켜주었다.
코드 1
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", a * ((b % 100) % 10));
printf("%d\n", a * ((b % 100) / 10));
printf("%d\n", a * (b / 100));
printf("%d\n", a * b);
return 0;
}
코드 2
#include <stdio.h>
#include <math.h>
#define SIZE 101
void div(int num, int*arr) {
int max, i = 0;
while (num != 0) {
max = num % 10;
arr[i] = max;
num = num / 10;
i++;
}
}
int main(){
int arrA[SIZE], arrB[SIZE];
int a, b, sum1 = 0, sum1_ = 0, sum2 = 0, sum2_ = 0, sum3 = 0, sum3_ = 0;
scanf("%d %d", &a, &b);
div(a,arrA); //[0]=일의자리 [3]=백의자리
div(b, arrB);
for (int i = 0; i < 3; i++) {
sum1 = arrA[i] * arrB[0];
sum1_ = sum1_+(sum1 * (pow((int)10, (int)i)));
}
for (int i = 0; i < 3; i++) {
sum2 = arrA[i] * arrB[1];
sum2_ = sum2_ + (sum2 * (pow((int)10, (int)i)));
}
for (int i = 0; i < 3; i++) {
sum3 = arrA[i] * arrB[2];
sum3_ = sum3_ + (sum3 * (pow((int)10, (int)i)));
}
printf("%d\n", sum1_);
printf("%d\n", sum2_ * 10);
printf("%d\n", sum3_ * 100);
printf("%d", sum1_ + 10 * sum2_ + 100 * sum3_);
return 0;
}
'프로그래밍 > C, C++' 카테고리의 다른 글
[C] 백준 7568 덩치 (0) | 2021.05.03 |
---|---|
[C] 백준 1065 한수 (0) | 2021.04.29 |
[C] 정수의 자리수 분리 (0) | 2021.04.08 |
[C] 백준 4949 균형잡힌세상 ⚖ (0) | 2021.04.08 |
[C] 백준 2798 블랙잭 🃏 (0) | 2021.04.07 |