문제출처: https://www.acmicpc.net/problem/2935
알고리즘은 다음과 같습니다.
1. 일단 입력값이 연산자를 제외하고 10의거듭제곱꼴 뿐이라 나올 수있는 출력값의 숫자는 0,1,2뿐입니다.
2. 입력값의 자릿수가 100을 넘기므로 int,long long 형으로 풀 수 없고 문자열로 접근합니다.
3. 입력값의 자릿수를 비교하며 연산합니다.
1) a와 b의 자릿수가 같을때
⑴: +연산: 2를 출력하고 a_size-1또는 b_size-1만큼 0을 출력합니다.
⑵ *연산: 1을출력하고 a_size+b_size -2만큼 0을 출력합니다.
2)a와 b의 자릿수가 다를때
⑴ +연산: a_size>b_size일때 : a[a_size-b_size]=1로바꾸고 a출력, 반대로 a_size<b_size일때는 b[b_size-a_size]=1로바꾸고 b출력
⑵ *연산: 1출력 후 a_size+b_size - 2만큼 0 출력
#include<iostream> #include<string> using namespace std; int main() { string a, b; char op; cin >> a >> op >> b; int a_size = a.size(); int b_size = b.size(); if (a_size == b_size)///사이즈같을때 { if (op == '+') { cout << 2; for (int i = 0; i < a_size - 1; i++) cout << 0; } else//'*' { cout << 1; for (int i = 0; i < a_size + b_size - 2; i++) cout << 0; } } else//사이즈다를때 { if (op == '*') { cout << 1; for (int i = 0; i < a_size + b_size - 2; i++) cout << 0; } else//'+' { if (a_size < b_size) { b[b_size - a_size] = '1'; cout << b; } else { a[a_size - b_size] = '1'; cout << a; } } } }
'문제풀이(BOJ) > 문자열' 카테고리의 다른 글
[백준 9226] 도깨비말 (0) | 2019.12.06 |
---|---|
[백준 1431] 시리얼 번호 (0) | 2019.12.04 |
[백준 2703] Cryptoquote (0) | 2019.12.02 |
[백준 11536] 줄 세우기 (0) | 2019.12.02 |
[백준10174] 팰린드롬 (0) | 2019.12.02 |