- 난이도: 브론즈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 |