일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- boj #백준
- 투포인터 #백준 #boj #20922 #22862
- 진법변환 #2to10 #10to2 #이진법 #십진법 #변환 #bitset #c++
- 코딩
- 호반우 상인
- 쌤쌤쌤
- graph
- 20117
- 줄어드는수
- 사이클 없는 그래프
- graph #최단경로
- backtracking #codetree #디버깅 #삼성코테
- 최소 #공배수 #최대 #공약수 #유클리드 #호제법 #lcm #gcd #c++ #boj #3343 #백준 #장미
- c++ #boj #
- 백준
- 16202
- N번째큰수
- 1174
- 3343
- hcpc
- 3D #Reconstruction #computer #vision #volume #metric #tsdf #kinect #fusion
- C++
- 22869
- 백준 #다익스트라 #dijkstra #9370 #c++
- c++ #입출력 #속도 #ios #sync_with_stdio #cin #cout #tie
- 레드아보
- BOJ
- 이분탐색 #dp #11053
- LIS #가장긴증가하는부분수열 #
- 30870
- Today
- Total
hyunjin
[11720]숫자의 합 -> 실패 본문
https://www.acmicpc.net/problem/11720
<코드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 함수로 메모리를 할당한 뒤 문자열을 저장합니다.
-> 이거 정말 헷갈린다.
아무튼 이 방식으로 해결했다.
결과 잘 나오는데 왜 실패인지
왜 실패한지는 잘 모르겠다. 도대체 왜지??...
'알고리즘 연습 > 백준' 카테고리의 다른 글
[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 |