[백준 BOJ] 15873번 공백 없는 A+B (C++/cpp)

2022. 8. 18. 10:41PS (Program Solving)/BOJ (백준)

문제 설명

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

 

15873번: 공백 없는 A+B

자연수 A, B (0 < A, B ≤ 10)가 첫 번째 줄에 주어진다. 단, 두 수의 사이에는 공백이 주어지지 않는다. 두 수의 앞에 불필요한 0이 붙는 경우는 없다.

www.acmicpc.net

백준 BOJ 15873번 공백 없는 A+B 문제 사진

 

접근 방법 - 문자열을 이용한 연산 문제

백준의 15873번 문제는 문자열을 이용하여 숫자에 대한 연산을 수행해야 하는 문제이다.

해당 문제는, 공백이 없이 주어진 A와 B 두 숫자에 대한 덧셈 결과를 출력해야 하는 문제이다.

여기서 A와 B는 모두 10 이하의 숫자라고 명시되어있는데, 이를 이용하면 해결이 그리 어렵지는 않을 것이다.

0이 중간에 있다면 A가 10이며, 0이 끝에 있다면 B가 10인 것으로 생각하면 된다는 것이다.

필자도 이러한 점을 이용하여 조건문을 작성하였고 그렇게 하여 문제를 해결할 수 있었다.

혹여나 해결에 어려움을 겪고 있다면 아래의 코드와 설명을 한번 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 2개의 값(st)을 입력받는다.

 

2) 2개의 수를 저장할 변수 a, b를 선언해둔다.

 

3) 조건문을 실행하여 각 조건마다 아래의 연산을 취한다.

- 만일 st의 길이가 4라면, 이는 a와 b 모두 십의 자릿수까지 있다는 뜻이며, 이는 곧 2개의 값 모두 10이라는 뜻이다.

따라서 이 경우엔 a와 b 모두 10으로 초기화한다.

- 만일 st의 길이가 3이라면, a와 b 둘 중 하나는 십의 자릿수까지 있으며 둘 중 하나의 값은 10이라는 뜻이다.

만일 중간에 0이 있다면, a를 10으로 설정하고 b를 끝에 위치한 숫자의 값으로 초기화한다.

다만 끝에 0이 있다면, b를 10으로 설정하고 a를 앞에 위치한 숫자의 값으로 초기화한다.

- st의 길이가 2라면, a와 b 둘 다 일의 자릿수의 숫자임을 뜻한다. 따라서 각 숫자의 값으로 초기화한다.

 

4) 3)에서 구한 a와 b의 값을 통해 덧셈 결과를 출력한 뒤, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;

//백준 15873번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	string st;
	cin >> st;

	int a, b;
	if (st.length() == 4) {
		a = (st[0] - '0') * 10;	b = (st[2] - '0') * 10;
	}
	else if (st.length() == 3) {
		if(st[1]=='0'){
			a = (st[0] - '0') * 10;
			b = st[2] - '0';
		}
		else {
			a = st[0] - '0';
			b = (st[1] - '0') * 10;
		}
	}
	else {
		a = st[0] - '0';	b = st[1] - '0';
	}

	cout << a + b << endl;
}

 

제출 결과

백준 BOJ 15873번 공백 없는 A+B 문제 C++ 제출 결과

사실 생각보다 많이 헤맸다...ㅠ

(2022.07.08 백준 15873번 문제 제출 결과)

반응형