알고리즘/BAEKJOON
[백준] 11382번 꼬마 정민 - C언어
거북이 코딩
2023. 10. 25. 14:07
꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다!
입력
첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 10^12)이 공백을 사이에 두고 주어진다.
출력
A+B+C의 값을 출력한다.
예제 입력 1
77 77 7777
예제 출력 1
7931
풀이 과정
이번 문제는 주어진 수 A,B,C의 범위가 중요합니다. (1 ≤ A, B, C ≤ 10^12) int 의 범위는 21억 밖에 되지 않기 때문에 조 단위의 계산은 하지 못합니다. 때문에 long long 을 써야 합니다. 저는 위 사실을 몰랐기 때문에 다른 방법으로 풀었는데 제가 처음에 푼 방법도 써놓겠습니다.
코드 1
#include<stdio.h>
int main(void) {
long long a, b, c;
scanf("%lld %lld %lld", &a, &b, &c);
printf("%lld", a + b + c);
}
이렇게 간단한 문제를 왜 포스팅하냐 궁금하실 수 있습니다. 제가 문제를 처음 풀때 scanf와 printf에서 long long의 서식문자를 따로 %lld로 지정해주어야 하는것을 몰랐기 때문에, 저는 long long을 이용해서 풀때 서식이 맞지않아서 (아마 int로 계산됐을 것입니다.) 문제가 틀렸습니다. 그래서 문자열로 푸는 문제인줄 알고 문자열로 풀었습니다. 밑에 문자열로 푼 코드도 써놓겠습니다.
코드 2
#include<stdio.h>
#include<string.h>
void Sorter(char* arr) { //문자열 안의 숫자를 계산하기 위해 오른쪽 정렬하고 빈곳은 0으로 채우는 함수
int i, j = 0, len = strlen(arr);
for (i = len;i >= 0;i--)
arr[13 - j++] = arr[i];
for (i = 0;i < 13 - len;i++)
arr[i] = '0';
}
void Sumer(char* arr1, char* arr2) { //문자열1에 문자열2를 더하는 함수
int i;
for (i = 12;i >= 0;i--) {
if (arr1[i + 1] - '0' + arr2[i] - '0' > 9) {
arr1[i + 1] = arr1[i + 1] - '0' + arr2[i] - '0' - 10 + '0';
arr1[i]++;
}
else
arr1[i + 1] = arr1[i + 1] - '0' + arr2[i] - '0' + '0';
}
}
int main(void) {
char a[14], b[14], c[14], sum[15] = { '0','0','0','0','0','0','0','0','0','0','0','0','0','0' };
scanf("%s", a); //숫자 3개를 문자열의 형태로 입력받는다
scanf("%s", b);
scanf("%s", c);
Sorter(a); //문자열 정렬
Sorter(b);
Sorter(c);
Sumer(sum, a); //문자열 더하기
Sumer(sum, b);
Sumer(sum, c);
int i = 0, cnt = 0;
while (sum[i++] == '0') //답 sum의 0개수 알아내기
cnt++;
for (i = cnt;i < 14;i++) //0이 아닌곳부터 답 출력
printf("%c", sum[i]);
}
마치며
굳이 어려운 길을 가서 풀었지만 그래도 이것도 나름의 의미가 있지 않을까 해서 기록해 두어야 겠다고 생각했습니다. 봐주셔서 감사합니다.