작성일 :

문제 링크

24348번 - ИЗРАЗ

설명

세 수의 순서를 정하고 +, -, * 중 두 개를 배치해 만들 수 있는 식의 최댓값을 구하는 문제입니다.


접근법

세 수를 오름차순으로 정렬하면, 가장 큰 두 수를 곱하고 가장 작은 수를 더하는 것이 최댓값이 됩니다.

다만 중간값이 0이면 곱셈 결과가 0이 되므로, 이 경우에는 가장 큰 수만 출력합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;

class Program {
  static void Main() {
    var parts = Console.ReadLine()!.Split();
    var a = long.Parse(parts[0]);
    var b = long.Parse(parts[1]);
    var c = long.Parse(parts[2]);

    if (a > b) (a, b) = (b, a);
    if (a > c) (a, c) = (c, a);
    if (b > c) (b, c) = (c, b);

    Console.WriteLine(b != 0 ? a + b * c : c);
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  ll a, b, c; cin >> a >> b >> c;

  if (a > b) swap(a, b);
  if (a > c) swap(a, c);
  if (b > c) swap(b, c);

  cout << (b ? a + b * c : c) << "\n";

  return 0;
}