본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 8713 : Znak działania

반응형

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

 

8713번: Znak działania

Napisz program, który wczyta dwie liczby całkowite a i b, a następnie wstawi znak działania '+', '-' albo '*' między nimi, w taki sposób, aby wynik działania był jak największy. Jeżeli można uzyskać największy wynik za pomocą więcej niż je

www.acmicpc.net

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

두 수a와b, 가장 큰 연산의 번호를 저장할 biggest 변수를 선언하고 a,b에 수를 입력해줍니다.

📔 풀이과정

+가 가장 큰 연산이라면 0을, -면 1, *면 2, 가장 큰 수가 2개 이상이면 -1을 반환하는 함수 biggestOp를 수행합니다. 해당 결과값에 따라 정답을 출력해줍니다.

📔 정답출력

-인 값에 대해서는 항상 괄호가 붙어야 합니다. 수를 출력할 때마다 음수에 대해 괄호를 붙여주는 함수 getString을 수행한 결과를 반영해줍니다.

* 수식의 우변도 -결과값을 가질 수 있음에 주의합니다.


📕 Code

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int a, b, biggest;

int biggestOp(){
    // + - * 순
    int nums[3] = {a+b, a-b, a*b};
    int maxNum = -INF;
    int maxIdx;
    for(int i = 0; i < 3; i++){
        if(maxNum == nums[i]) return -1;
        if(maxNum < nums[i]) 
            maxIdx = i, maxNum = nums[i];
    }
    return maxIdx;
}

string getString(int num){
    string str = to_string(num);
    if(num < 0) return "(" + str + ")";
    return str;
}

int main(){
    cin >> a >> b;
    biggest = biggestOp();
    if(!biggest)          cout << getString(a) << "+" << getString(b) << "=" << getString(a + b);
    else if(biggest == 1) cout << getString(a) << "-" << getString(b) << "=" << getString(a - b);
    else if(biggest == 2) cout << getString(a) << "*" << getString(b) << "=" << getString(a * b);
    else                  cout << "NIE";
}