본문 바로가기

백준

11720(숫자의 합 구하기)

  • 난이도: 브론즈5

N개의 숫자가 공백 없이 쓰여있을 때, 이 숫자를 모두 합해 출력하는 프로그램을 작성하는 문제.

https://www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

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

www.acmicpc.net

 

[풀이전략]

1. string으로, 공백 없이 쓰인 숫자를 입력받는다.

2. string을 한글자씩 char로 변환한다.

3. char를 int형으로 변환해 누적합을 구한다.

 

[핵심 포인트]

아스키 코드에 대한 이해가 필요하다.

* '0'의 아스키코드 = 48이므로

'0'-48=0, '1'-48=1, ... 이런식으로 char형 문자에 48을 빼면 원하는 숫자값 int형으로 변환이 가능하다.

 

 

[소스코드]

  • 사용언어 C++
#include <iostream>
#include <vector>
using namespace std;

int main(void) {
    int n, sum = 0;
    int arr[101] = { 0 };

    cin >> n;
    string number;
    cin >> number;
    for (int i = 0; i < n; i++) {
        arr[i] = (int)number[i] - 48;
        sum += arr[i];
    }
    cout << sum << endl;
}

 

 

[주의할 점]

atoi는 const char* 자료형을 int로 변환하므로, char형으로 인식되는 string[i]꼴을 변환할 수 없다. 

 

 

[기본 지식]

형 변환은 코딩 테스트에서 자주 사용되는 기술이다. 관련 함수는 아래와 같다.

 

  • string -> 숫자형(int, long, float, double)
#include <iostream>
#include <string>
using namespace std;

int main(void) {
    
    string num_i = "123";
    string num_d = "123.456";
    
    int inum = stoi(num_i);
    long lnum = stol(num_i);
    float fnum = stof(num_d);
    double dnum = stod(num_d);
    
    cout << inum << ", " << lnum << ", " << fnum << ", " << dnum << endl;
    
    return 0;
}

 

  • 숫자형 -> string형
#include <iostream>
#include <string>
using namespace std;

int main(void) {
    
    int inum=123;
    long lnum=123;
    float fnum=123.456;
    double dnum=123.456;
    
    string iToS=to_string(inum);
    string lToS=to_string(lnum);
    string fToS=to_string(fnum);
    string dToS=to_string(dnum);
    
    cout<<iToS<<", "<<lToS<<", "<<fToS<<", "<<dToS<<endl;
    
    return 0;
}

'백준' 카테고리의 다른 글

백준 11399: ATM  (1) 2024.02.01
백준 1337: 버블 소트  (0) 2024.01.31
백준 11660: 구간합 구하기 5  (0) 2024.01.31
백준 11659: 구간합 구하기 4  (0) 2024.01.31
백준 - 9012, 9613, 2309  (0) 2023.11.21