https://www.acmicpc.net/problem/2588
#include <stdio.h>
#include <math.h>
int main() {
int firstNum[3] = { 0, };
int secondNum[3] = { 0, };
int totalNum = 0, count = 0;
scanf("%1d%1d%1d", &firstNum[0], &firstNum[1], &firstNum[2]);
scanf("%1d%1d%1d", &secondNum[0], &secondNum[1], &secondNum[2]);
for (int i = 2;i >= 0;i--) {
int temp = 0;
int cnt = 0;
for (int j = 2;j >= 0;j--) {
temp += secondNum[i] * firstNum[j] * (int)pow(10, cnt);
cnt++;
}
printf("%d\n", temp);
totalNum += temp * (int)pow(10, count);
count++;
}
printf("%d", totalNum);
}
scanf로 1개씩 끊어서 입력 받고, 각각 곱한다음 cnt랑 count로 자릿수 * 10 해줘서 자리 맞춰줌.
간단한 문제인데 풀면서도 좀 꼬아서 푼거같다는 생각이 들었음
다른 사람들 코드
main(i,j){scanf("%d%d",&i,&j);printf("%d %d %d %d",j%10*i,j/10%10*i,j/100*i,i*j);}
보고 고쳐본 내 코드
#include <stdio.h>
int main() {
int i, j;
scanf("%d%d", &i, &j);
printf("%d\n%d\n%d\n%d", j % 10 * i, j / 10 % 10 * i, j / 100 % 10 * i, i*j);
return 0;
}
이 코드를 보고나니까 내가 얼마나 멍청하게 풀었는지 깨달았다.
단계별로 값을 구해야하니까 일일히 하나씩 곱한다음에 더해서 구해야한다고 생각했다.
더할 필요없이 첫번째 값이랑 두번째 값 자릿수를 곱해주기만 하면 되는데 너무 꼬아서 생각했다.
그리고 마지막 결과 값도 굳이 더할 필요없이 그냥 곱하면 되는건데 왜이렇게 푼건지..
두번째 숫자도 일일히 따로 입력받는게 아니라 입력받은걸 10이나 100으로 나누면 자리수가 줄어들고
그 줄어든 숫자에 %10을 하면 각 자릿수의 값이 나오는데 일일히 입력받아 푼것도 비효율적이었던 것 같다.
메모리나 시간에 엄청 큰 차이가 있지는 않지만 효율적이지 못하게 짠 코드..
'알고리즘 > 백준' 카테고리의 다른 글
| [JavaScript/BFS] 백준 골드 5 : 18405 - 경쟁적 전염 (0) | 2023.08.12 |
|---|---|
| [JavaScript/DFS] 백준 골드 4 : 14502 - 연구소 (0) | 2023.08.12 |
| [C++] - 백준(Baekjoon) : 4673번 셀프넘버 (0) | 2022.06.22 |
| [C] - 백준(Baekjoon) : 1546번 평균 (1) | 2022.06.16 |
| [C] - 백준(Baekjoon) : 2480번 주사위 3개 (0) | 2022.06.07 |