[11720]숫자의 합 -> 실패
https://www.acmicpc.net/problem/11720
11720번: 숫자의 합
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
www.acmicpc.net
<코드1-실패>
#include
int main(void) {
int count,sum=0;
long long num;
scanf("%d\n%ll", &count, &num);
for (int i = 0; i < count;i++) {
sum += num % 10;
num /= 10;
}
printf("%d", sum);
return 0;
}
왜 실패 했나???
자료 사이즈 떄문에
getchar로 하나하나 받아야하나보다
getChar로 하다가 꼬여서 포인터 사용해서 했다.
<코드2>
int main(void) {
int count, sum = 0;
char *numArr;
scanf("%d", &count);
numArr = (char *)malloc(sizeof(char) * count);
scanf("%s", numArr);
for (int i = 0; i < count;i++) {
sum += numArr[i]-'0';
}
free(numArr);
printf("sum = %d", sum);
return 0;
}
char *s1 = "Hello";와 같이 문자열 포인터를 선언한 뒤 scanf 함수로 입력 값을 문자열 포인터에 저장했습니다. 얼핏 보면 저장이 될 것 같지만 실행을 해보면 에러가 발생합니다. 왜냐하면 s1에 저장된 메모리 주소는 읽기만 할 수 있고, 쓰기가 막혀있기 때문입니다. 따라서 s1과 같이 문자열 리터럴의 주소가 할당된 포인터는 scanf 함수에서 사용할 수 없습니다.
입력 값을 문자열 포인터에 저장하려면 문자열이 들어갈 공간을 따로 마련해야 됩니다. 따라서 다음과 같이 malloc 함수로 메모리를 할당한 뒤 문자열을 저장합니다.
-> 이거 정말 헷갈린다.
아무튼 이 방식으로 해결했다.
결과 잘 나오는데 왜 실패인지
왜 실패한지는 잘 모르겠다. 도대체 왜지??...