728x90
군대에서 코딩하기
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
- 1 ≤ my_string 안의 자연수 ≤ 1000
- 연속된 수는 하나의 숫자로 간주합니다.
- 000123과 같이 0이 선행하는 경우는 없습니다.
- 문자열에 자연수가 없는 경우 0을 return 해주세요.
입출력 예
my_string result
"aAb1B2cC34oOp" | 37 |
"1a2b3c4d123Z" | 133 |
입출력 예 설명
입출력 예 #1
- "aAb1B2cC34oOp"안의 자연수는 1, 2, 34 입니다. 따라서 1 + 2 + 34 = 37 을 return합니다.
입출력 예 #2
- "1a2b3c4d123Z"안의 자연수는 1, 2, 3, 4, 123 입니다. 따라서 1 + 2 + 3 + 4 + 123 = 133 을 return합니다.
[소스코드]
#include <stdio.h>
#include <string.h>
// 파라미터로 주어지는 문자열은 const로 주어집니다.변경하려면 문자열을 복사해서 사용하세요.
int solution(const char* a) {
int answer = atoi(a);
for(int i=0;i<strlen(a);i++){
if(a[i]>='A'&&a[i+1]<='9'){
answer+=atoi(&a[i+1]);
}
}
return answer;
}
일단 atoi 함수에 대해 이것저것 실험을 많이 해보았다.
atoi함수는 간략하게 말하면 문자열의 숫자들을 그대로 정수형으로 옮겨준다. ex) char a[10]="12345";
int b=atoi(a); 를 해주게 되면 b의 출력값은 12345가된다.atoi함수는 문자가 있거나 공백,널값등이 있게되면
그 전까지의 숫자만 출력해 주는데 그점을 이용했다.
- my_string을 a로 바꿔주었다.
- 만약 a[i]가 문자고 a[i+1]이 숫자면 answer에 더해주면 된다. a12345a면 12345만 출력되기 때문
- a[0]이 숫자일 수도 있기 때문에 int answer=atoi(a);로 시작을 해주었다.
- atoi(&a[i+1]);을 해주게 되면 a의 i+1 값부터 숫자를 반환해준다.
후기
지금까지 atoi를 사용하기는 했었지만 주솟값을 넣어서 사용이 되는지는 몰랐다.
성장했다.!
'프로그래머스' 카테고리의 다른 글
[C언어/프로그래머스 레벨0]-최빈값 구하기 (0) | 2022.11.13 |
---|---|
[C언어/프로그래머스 레벨0]-유한소수 판별하기 (0) | 2022.11.12 |
C언어[프로그래머스 레벨0]외계어 사전 (0) | 2022.11.11 |
[C언어/프로그래머스 레벨-1]-2016년 (0) | 2022.11.08 |
[C언어/프로그래머스 레벨 0]-직사각형 넓이 구하기 (1) | 2022.11.05 |