알고리즘/프로그래머스 1단계

프로그래머스 - 숨어있는 숫자의 덧셈(2)

게임만드는학생 2023. 8. 13. 14:41

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

 

프로그래머스

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

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

int solution(string my_string) {
    int answer = 0;
    
    int im=0;
    
    for(int i=0;i<my_string.length();i++)
    {
        if(my_string[i]>='0'&&my_string[i]<='9')
        {
            if(im==0)im=(my_string[i]-'0');
            else 
            {
                im *= 10;
                im += my_string[i]-'0';
            }
            
        }
        else
        {
            answer+=im;
            im=0;
        }
    }
    if (im != 0)answer += im;
    return answer;
}

 

설명 

 

문자열에서 숫자인 부분을 int 형으로 바꿔서 다 더하는 문제이다. 

if(my_string[i]>='0'&&my_string[i]<='9')

숫자인지 판별하는 코드이다. 

만약 my_string[i] 이 숫자면 im 이라는 변수에 숫자를 저장한다. 

 

그리고 문자가 나왔을 때, answer에 im을 더한다. 

 

2자리 이상의 숫자는 im 의 값이 0 인지 아닌지를 비교해서 0이면 answer를 대입하고 

0이 아니면 이전에 숫자가 나온 것이기 때문에 곱하기10 을 다시 더해준다. 

 

그리고 문자가 나오면 im 값을 answer 에 더해준다. 

 

조심할 것은 "zzz123" 같은 경우이다. 

문자열이 3으로 종료되기 때문에 answer+=im 코드가 마지막에 실행되지 않는다.

따라서 반복문을 나오고 im이 0이 아니라면 더하지 않은 숫자가 있다는 뜻이므로 한 번 answer에 im을 더해주면 된다.