c언어

[C/프로그래머스 레벨0]-숨어있는 숫자의 덧셈(1)

이상한 코딩 2022. 10. 29. 23:57
728x90




문제 설명


문자열 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 배열에
더해주게 되면 원하는 답을 얻을 수 있는 것이다.

[후기]


오랜만의 아스키 코드 문제 내용이라 많이 헷갈린 것 같다.
아스키 코드표만 보거나 기억한다면 쉽게 풀수있다.