C++ Programmers Test/Level 1

[Programmers] [C++] 문자열 다루기 기본 / 자릿수 더하기

시카Dev 2024. 8. 5. 00:56

 

<문제 설명>
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수,
solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

<제한 사항>
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

<입출력 예>
s	return
"a234"	false
"1234"	true

#include <string>
#include <vector>

using namespace std;

bool solution(string s) {
    
    bool answer = true;
    
    if (s.size() == 4 || s.size() == 6){ 
        for (char i : s)
            if (i > 47 && i < 58)
                answer = true;
            else
                return false;
        
        return answer;
    }
    else {
        return false;
    }
    
}

 

우선 문자열 길이가 4인지 6인지부터 판단해줘야 한다.

이후는 문자 i가 문자열 s을 훑으면서 해당 글자가 숫자인지 판단한다

 

이때 아스키 코드값(48~57까지가 0~9)을 활용하고, 만약 쭉 훑다가 아스키값에서 벗어나는 알파벳이 있다면 바로 false문을 리턴하고 턴을 종료한다(?)

그렇지 않다면 계속해서 숫자인지 검사하고, 검사가 다 끝났다면 answer을 반환한다

 


 

<문제 설명>
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

<제한사항>
N의 범위 : 100,000,000 이하의 자연수

<입출력 예>
N	answer
123	6
987	24

<입출력 예 설명>
입출력 예 #1
문제의 예시와 같습니다.

입출력 예 #2
9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.

#include <iostream>

using namespace std;
int solution(int n)
{
    int answer = 0;
    
    while (n > 0)
    {
        answer += n % 10;
        n /= 10;        
    }
    
    return answer;
}

 

입출력 예 #2에서 볼 수 있듯이, 일의 자리부터 시작해서 백의 자리까지 더하고 있다.

그래서 각 자리의 10을 나눈 나머지를 더하고, 그 수를 10씩 나누는 것을 계속 반복하게 하였다