#10824: 네 수
문제:
네 자연수 A, B, C, D가 주어진다. 이때, A와 B를 붙인 수와 C와 D를 붙인 수의 합을 구하는 프로그램을 작성하시오.
두 수 A와 B를 합치는 것은 A의 뒤에 B를 붙이는 것을 의미한다. 즉, 20과 30을 붙이면 2030이 된다.
입력:
첫째 줄에 네 자연수 A, B, C, D가 주어진다. (1 ≤ A, B, C, D ≤ 1,000,000)
풀이:
- 이 문제를 풀기 위해서는 stoi, stoll과 같은 문자열을 숫자 값으로 바꾸는 함수를 알아야 된다. 이 문제에서 A의 최대값은 1,000,000이며1,000,000인 B와 합칠 경우 최대 10,000,001,000,000이다. 이렇게 큰 수는 일반적인 int를 사용하면 out of range(범위 밖)런타임 에러가 뜬다. 자료형의 범위 밖으로 값이 나가기 때문이다. 따라서 아래 표를 보면 알겠지만 이 경우에는 long long int를 사용해주는게 제일 좋다.
자료형별 크기
Type | Storage Size | Value range |
---|---|---|
char | 1 byte | -128 to 127 or 0 to 255 |
unsigned char | 1 byte | 0 to 255 |
signed char | 1 byte | -128 to 127 |
int | 2 or 4 bytes | -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647 |
unsigned int | 2 or 4 bytes | 0 to 65,535 or 0 to 4,294,967,295 |
short | 2 bytes | -32,768 to 32,767 |
unsigned short | 2 bytes | 0 to 65,535 |
long | 8 bytes or (4bytes for 32 bit OS) | -9223372036854775808 to 9223372036854775807 |
unsigned long | 8 bytes | 0 to 18446744073709551615 |
- 문자열을 더하기 연산으로 합쳐주면 앞뒤가 이어서 붙기 때문에 A와 B를 더하기 연산으로 붙여준 뒤 stoll로 long long int 자료형으로 바꿔준다. 그 다음 똑같이 C와 D를 붙여준 뒤 앞에 저장한 값에 더해준다.
🔎문제 개념 자체는 어렵지 않았지만 stoll 함수와 자료형의 크기를 잘 모른다면 살짝 헤맬 수 있는 문제이다. 추가적으로 c++11이 아닐 경우에는 stoll을 사용 못하니 아닐 경우에는 sstream을 이용해주면 된다.
코드:
#include <iostream>
using namespace std;
int main(){
string numbers[4];
long long answer = 0;
//입력
for(int i=0; i < 4; i++){
cin >> numbers[i];
}
//1번째 2번째 숫자 합치고 저장
answer += stoll(numbers[0]+numbers[1]);
//3번째 4번째 숫자 합치고 더 앞에 합친 값에 더 해주기
answer += stoll(numbers[2]+numbers[3]);
//출력
cout<<answer;
}
Leave a comment