PS/BOJ
백준 2935 (C++) 소음 (출력 초과, 틀렸습니다)
akinakamori
2021. 10. 20. 14:15
728x90
SMALL
아이디어
풀면서 재밌었던 구현 문제다.
숫자가 최대 100자리까지 주어진다고 했으므로 우리가 알고 있는 일반적인 변수크기로는 택도 없다.
따라서 string으로 a, b 변수를 만들고 어떻게 연산할 것인지 고민해보자.
우선 곱셈은 간단하다.
곱셈은 자릿수끼리의 덧셈이므로 string a와 b의 size(또는 length)의 덧셈만큼 0을 출력하면 된다.
덧셈에서는 경우의 수가 세가지이다
1. a > b
2. a < b
3. a == b
1. 의 경우 a.size() - b.size() - 1만큼 자릿수(0)를 출력한다.
2. 의 경우도 1과 마찬가지이다.
3. 의 경우는 "2"를 출력하고 수의 자릿수 -1만큼 "0"을 출력하면 된다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
using ll = long long;
const int INF = 1e8;
const int MAX = 500003;
string a,b;
char c;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> a >> c >> b;
if (c == '*') { // 곱셈
cout << "1";
for (int i = 0; i < a.size() + b.size() - 2; i++) {
cout << "0";
}
}
else { // 덧셈
if (a.size() > b.size()) { // case 1
cout << "1";
for (int i = 0; i < a.size() - b.size() - 1; i++) {
cout << "0";
}
cout << "1";
for (int i = 0; i < b.size() - 1; i++) {
cout << "0";
}
}
else if (a.size() < b.size()) { // case 2
cout << "1";
for (int i = 0; i < b.size() - a.size()- 1; i++) {
cout << "0";
}
cout << "1";
for (int i = 0; i < a.size() - 1; i++) {
cout << "0";
}
}
else { // case 3
cout << "2";
for (int i = 0; i < a.size()-1; i++) {
cout << "0";
}
}
}
return 0;
}
728x90
LIST