hyunjin

[11720]숫자의 합 -> 실패 본문

알고리즘 연습/백준

[11720]숫자의 합 -> 실패

_h.j 2019. 5. 16. 01:17
728x90

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 함수로 메모리를 할당한 뒤 문자열을 저장합니다.

-> 이거 정말 헷갈린다.

 

아무튼 이 방식으로 해결했다.

결과 잘 나오는데 왜 실패인지

 

왜 실패한지는 잘 모르겠다. 도대체 왜지??...

 

728x90

'알고리즘 연습 > 백준' 카테고리의 다른 글

[1065]한수  (0) 2019.05.17
[11721]열 개씩 끊어 출력하기  (0) 2019.05.16
[2441]별찍기4  (0) 2019.05.15
[2439]별찍기-2  (0) 2019.05.15
[1475][C]방 번호->실패  (0) 2019.05.02