문제 확인하기
2. Solution 1 (Python, memory: 31256KB, time: 44ms)
a, b, c = map(int, input().split())
sorted_lengths = sorted([a, b, c])
result = sorted_lengths[0] + sorted_lengths[1] + min(sorted_lengths[2], sorted_lengths[0] + sorted_lengths[1] - 1)
print(result)
3. Solution 2 (Java 11, memory: 14536KB, time: 132ms)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).sorted().toArray();
if (input[0] + input[1] > input[2]) {
System.out.println(input[0] + input[1] + input[2]);
} else {
System.out.println((input[0] + input[1]) * 2 - 1);
}
}
}
3-1. 가장 작은 두 수의 합에 1을 빼고 2를 곱하는 이유
- 가장 작은 두 수의 합은 가장 큰 수보다 작기 때문에 세 수를 모두 더한 값으로 삼각형을 만들 수 없습니다.
- 따라서, 가장 작은 두 수의 합에 1을 빼고 2를 곱함으로써, 가장 작은 두 수와 가장 큰 수의 합보다 1 작은 값을 얻을 수 있습니다.
- 이렇게 계산한 값은 가장 작은 두 수를 더한 뒤, 나머지 하나의 수에도 더할 수 있기 때문에 삼각형의 둘레의 근사치가 됩니다.
3-2. 해당 코드에서 사용된 클래스에 대해 알아보기
- java.io.BufferedReader: 입력 스트림에서 텍스트를 읽기 위한 기능을 제공하는 클래스입니다. BufferedReader는 입력 스트림으로부터 데이터를 효율적으로 읽어오기 위해 버퍼링된 기능을 제공합니다. 버퍼링은 입출력 작업의 성능을 향상시키는 데 도움이 되며, 한 번에 여러 문자를 읽어오는 등의 최적화를 수행합니다.
- java.io.InputStreamReader: 입력 스트림으로부터 바이트를 읽어 문자로 변환하는 역할을 수행하는 클래스입니다. InputStreamReader는 바이트 스트림으로부터 문자로 변환하는 데 사용됩니다. 주로 System.in과 같은 바이트 기반 입력 스트림을 문자 기반 스트림으로 변환하여 텍스트를 읽을 수 있도록 합니다.
- 두 클래스 모두 java.io 패키지의 일부이며, 입력 처리와 관련된 작업을 수행하는 데 사용됩니다.
4. Solution 3 (C++17, memory: 2020KB, time: 0ms)
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int a[3];
cin >> a[0] >> a[1] >> a[2];
sort(a, a + 3);
if (a[0] + a[1] > a[2])
cout << a[0] + a[1] + a[2] << endl;
else
cout << (a[0] + a[1]) * 2 - 1 << endl;
return 0;
}