본문 바로가기

알고리즘/[프로그래머스]Lv.0

[프로그래머스]Lv0. 숨어있는 숫자의 덧셈 (1)

본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+  Java언어 내용도 포함되어있습니다. )

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120851

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

1.문제설명

문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

제한사항
1 ≤ my_string의 길이 ≤ 1,000my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

 

2. 문제해결 접근

  • 문자열값을 정수형변수 int에 담으면 아스키코드로 변환되어진다.
  • 반복문을 통해, 각 문자열을 조건문을 통해 정수형만 가려 합산한다.
  • 정수형의 합은, 정수형 그대로 합산되는것이 아닌, 아스키코드 변환 숫자가 들어가므로 -'0' 처리하여 연산해준다.

 

3.C++ 답안

#include <string>
#include <vector>

using namespace std;

int solution(string my_string) {
    int answer = 0;
    for (int i = 0; i < my_string.size(); i++)
    {
        if( my_string[i] >= '0' && my_string[i] <= '9' )
        {
            answer += my_string[i]-'0';
        }
    }
    
    return answer;
}

 

4. C++ 문법 설명과 표현법

 

answer += my_string[i]-'0';

반복문안에서 합산중,

 각 값의 아스키코드 변환값을 더해준다.

이때, 문자'1'은 아스키코드 변환값은 49이므로,

일반적인 정수형 10진수 연산이 되는것이 아니라 아스키코드의 연산합이 출력된다.

그러므로 문자'0'의 아스키코드 변환값을 48을 감해주므로해서

각 문자를 정수와 동일한 값으로 조정한다.