[C/프로그래머스 레벨0]-숨어있는 숫자의 덧셈(1)
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
1≤ my_string의 길이 ≤ 1,000
my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.
입출력예
my_string result
"aAb1B2cC34oOp" 10
"1a2b3c4d123" 16
입출력 예 설명
입출력 예 #1
"aAb1B2cC34oOp"안의 한자리 자연수는
1, 2, 3, 4 입니다. 따라서 1 + 2 + 3 + 4 = 10 을 return합니다.
입출력 예 #2
"1a2b3c4d123Z"안의 한자리 자연수는
1, 2, 3, 4, 1, 2, 3 입니다.
따라서 1 + 2 + 3 + 4 + 1 + 2 + 3 = 16 을 return합니다.
[소스 코드]
#include <stdio.h>
#include <string.h>
int solution(const char* my_string) {
int answer = 0;
for(int i=0;i<strlen(my_string);i++){
if(my_string[i]>'0'&&my_string[i]<='9'){
answer+=my_string[i]-'0';
}
}
return answer;
}
문제의 핵심은 문자열의 아스키 코드값으로 계산했을때
1~9까지의 수만 answer 배열에 저장하는 것이다.
만약 answer[0]의 요소가 문자 '1'이라면 아스키 코드값은 49가 되며, 문자 '0'의 경우는 48이 된다.
49와 48의 차는 1로 정수형 1을 얻을 수 있다.
또한 문자 '9'의 값은 57로, '0'의 아스키 코드값 48과의 차는 9가 된다.
즉 1~9까지의 정수형 값을 얻을 수 있고, answer 배열에
더해주게 되면 원하는 답을 얻을 수 있는 것이다.
[후기]
오랜만의 아스키 코드 문제 내용이라 많이 헷갈린 것 같다.
아스키 코드표만 보거나 기억한다면 쉽게 풀수있다.