Adventure of 빠타박스
article thumbnail
728x90
728x90
SMALL

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 256 MB 197923 108210 90028 55.366%

문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

출력

입력으로 주어진 숫자 N개의 합을 출력한다.

예제 입력 1 복사

1
1

예제 출력 1 복사

1

예제 입력 2 복사

5
54321

예제 출력 2 복사

15

예제 입력 3 복사

25
7000000000000000000000000

예제 출력 3 복사

7

예제 입력 4 복사

11
10987654321

예제 출력 4 복사

46

 


풀이

#include <iostream>
#include <string>
using namespace std;

int main()
{

	int N = 0; //문자열로 입력받은 숫자의 길이 
	string numbers; // 문자열 형태로 변환
 	cin >> N >> numbers;

	int sum = 0;
	for (int i = 0; i < N; i++)
	{
		sum += numbers[i] - '0';
	}
	cout << sum << "\\n";

	return 0;
}
  1. N 입력값으로 숫자의 길이를 입력
  2. numbers 실제 숫자를 문자열 형태로 입력받는다
  3. 문자열로 입력받은 숫자의 각 자릿수를 숫자로 변환하여 더한 뒤 그 결과를 출력
  • 이렇게도 풀 수 있다?
  • 이러한 방식으로 코드를 최적화할 수 있는 방법의 예
  • #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        int N;
        string numbers;
        cin >> N >> numbers;
    
        int lookup[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    
        int sum = 0;
        for (int i = 0; i < N; i++)
        {
            sum += lookup[numbers[i] - '0'];
        }
        cout << sum << "\\n";
    
        return 0;
    }
    
     
  • 가능한 최적화는 미리 계산된 조회 테이블을 사용하여 각 숫자의 문자 표현을 숫자 값으로 변환하는 것입니다.
  • 이것은 크기 10의 배열을 만들고 0에서 9까지의 값을 해당 인덱스에 할당하여 수행할 수 있습니다.
  • 그런 다음 루프에서 '0'에 대한 문자 코드를 빼는 대신 이 배열을 사용하여 문자를 숫자 값으로 변환할 수 있습니다.
728x90
728x90
LIST
profile

Adventure of 빠타박스

@PPATABOX

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!