1 minute read

백준 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