문제
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
#문제 풀이 방법
1. 숫자의 개수 N이 입력된다.
2. 숫자 N개가 공백 없이 입력된다.
3. 숫자 N개의 합을 출력한다.
4. 문제의 의도로 보아, 숫자의 자릿수가 주어지므로 N을 되도록이면 사용하자!
(물론 사용 안하고 푸는 방법도 많다!)
5. C/C++일 경우 숫자의 범위에 주의해야한다!! ↔ Python은 상대적으로 덜 하다.
6. 그러므로 문자열 또는 리스트 형식으로 입력받거나
7. 숫자의 배열로 입력을 받자.
☞문자열로 받았을 때는 숫자로 바꿔주기 위해서는 아스키코드를 이용하자!(in C/C++)
#주의!
처음에 풀 때는 아무생각없이 숫자가 주어진다는 이유만으로
N자리 숫자를 문자열이 아니라 정수로 받아들였다. 이렇게 하면 문제가 발생한다. (in C/C++)
왜냐하면 1≤N≤100이므로 N의 자리 숫자를 unsigned long long으로 받아도 받을 수 있는 범위를 넘어간다.
#include <iostream>
using namespace std;
int main()
{
int a;
unsigned long long b;
cin>>a;
cin>>b;
int c=b%10;
while(b/=10)
{
c+=b%10;
}
cout<<c<<endl;
}
정수 자료형 크기 | ||
자료형 | 크기 | 범위 |
char | 1Byte | -128~127 |
unsigned char | 1Byte | 0~255 |
short | 2Byte | -32,768~32,767 |
unsigned short | 2Byte | 0~65,535 |
int | 4Byte | -2,147,483,648~ 2,147,483,647 |
unsigned int | 4Byte | 0~4,294,967,295 |
long | 4Byte | -2,147,483,648~ 2,147,483,647 |
unsigned long | 4Byte | 0~4,294,967,295 |
long long | 8Byte | -9,223,372,036,854,775,808 ~9,223,372,036,854,775,807 |
unsigned long long | 8Byte | 0~18,446,744,073,709,551,615 |
가장 범위가 큰 unsigned long long만 해도 최대 20자리 양의 정수 밖에 입력을 받지 못하는 것을 알 수 있다.
#C/C++
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *str;
int N;
scanf("%d",&N);
str=(char*)malloc((sizeof(char))*(N));//입력받은 N의 자리 숫자를 기반으로 동적할당.
scanf("%s",str);
int ans=0;
for(int i=0;i<N;i++)
{
ans+=(str[i]-'0');//아스키코드를 이용하여 숫자로 저장
}
printf("%d",ans);
return 0;
}
/*
char str[100];
scanf("%s",str);
동적할당말고 위와 같이 해도 된다.
*/
#include <iostream>
using namespace std;
int main() {
int N, ans = 0;
int str[100];//숫자의 배열 선언
cin >> N;
for (int i = 0; i < N; i++) {
scanf("%1d", &str[i]);//한글자씩 입력받아서 배열에 저장
ans += str[i];
}
cout << ans;
return 0;
}
(scanf()는 공백(space)이나 개행(enter)을 기준으로 입력을 받는다.)
#include <iostream>
using namespace std;
int main()
{
string str;
int N;
cin>>N;
cin>>str;
int ans=0;
for(int i=0;i<N;i++)
{
ans+=(str[i]-'0');
}
cout<<ans;
return 0;
}
★str[i]-'0'을 살펴보면, 54321일 때
'5'-'0'=53-48=5
'4'-'0'=52-48=4
'3'-'0'=51-48=3
.
.
순으로 계산이 된다.
#Python
N=int(input())
ls=list(map(int,input()))//입력 받은 것을 정수 값을 가지는 리스트로 변환
ans=0
for i in range(N):
ans+=ls[i]
print(ans)
☞파이썬은 C/C++와 달리 숫자의 범위가 커도 그냥 계산할 수도 있다.( 파이썬의 int 자료형은 범위가 무제한이다.)
N=int(input())
s=int(input())
ans=int(0)
while s>0:
ans+=s%10
s//=10
print(int(ans))
★
Python 2에서는 예를 들어 5와 2 모두 정수인 상태에서 나눌 경우,
5/2=2로 나오게 되는데
Python 3부터는 실수로 나오면서 2.5로 나오게 된다.
따라서 소수점 이하를 절삭 하기 위해,즉 몫을 구하기 위해 /가 아닌 //로 계산한다.
'PS > 백준' 카테고리의 다른 글
[백준/Baekjoon]<2562번> 최댓값 [C/C++/Python][Class 1] (0) | 2022.07.21 |
---|---|
[백준/Baekjoon]<2742번> 기찍 N [C/C++/Python][Class 1] (0) | 2022.07.20 |
[백준/Baekjoon]<2439번> 별 찍기 - 2 [C/C++/Python][Class 1] (0) | 2022.07.18 |
[백준/Baekjoon]<11654번> 아스키 코드 [C/C++/Python][Class 1] (0) | 2022.07.17 |
[백준/Baekjoon]<10998번> A×B [C/C++/Python][Class 1] (0) | 2022.07.16 |