영선이는 길이가 a, b, c인 세 막대를 가지고 있고, 각 막대의 길이를 마음대로 줄일 수 있다.
영선이는 세 막대를 이용해서 아래 조건을 만족하는 삼각형을 만들려고 한다.
- 각 막대의 길이는 양의 정수이다
- 세 막대를 이용해서 넓이가 양수인 삼각형을 만들 수 있어야 한다.
- 삼각형의 둘레를 최대로 해야 한다.
a, b, c가 주어졌을 때, 만들 수 있는 가장 큰 둘레를 구하는 프로그램을 작성하시오.
첫째 줄에 a, b, c (1 ≤ a, b, c ≤ 100)가 주어진다.
첫째 줄에 만들 수 있는 가장 큰 삼각형의 둘레를 출력한다.
import java.io.*;
import java.util.*;
public class Main{
public static void main(String [] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String [] arr = br.readLine().split(" ");
int [] numArr = new int [3];
for(int i= 0; i< 3; i++){
numArr[i] = Integer.parseInt(arr[i]);
}
Arrays.sort(numArr);
if(!(numArr[2]< numArr[0] + numArr[1])){
while(!(numArr[2]< numArr[0] + numArr[1]))numArr[2]--;
}
System.out.print(numArr[0]+numArr[1] + numArr[2]);
}
}
리팩토링
import java.io.*;
import java.util.*;
public class Main{
public static void main(String [] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String [] arr = br.readLine().split(" ");
int [] numArr = new int [3];
for(int i= 0; i< 3; i++){
numArr[i] = Integer.parseInt(arr[i]);
}
Arrays.sort(numArr);
if(numArr[2] >= numArr[0] + numArr[1]){
numArr[2] = numArr[0] + numArr[1] -1 ;
}
System.out.print(numArr[0]+numArr[1] + numArr[2]);
}
}
1. 코테하면서 초딩때 배웠던 수학 지식 다시 학습하는 기분
📌 삼각형의 조건 : 가장 큰 변 < 나머지 변 + 나머지 변
2. 조건을 완성시키기 위해 while 문을 돌렸는데
사실 while문이 필요가 없었다. if 문으로 연산 한번으로 완성시킬 수 있었음.
while문의 목적을 생각해보면
삼각형을 완성 시킬 수 있는 최대값으로(b+c-1)까지 도달하는 게 목적이므로
while문이 필요가 없음.
첫번째가 리팩토링 결과 .
while문이 빠졌는데 왜 시간은 더 걸렸을까?
(미세한 시간차이니까 .. 코드 가독성을 더 높였다고 생각하자)
메모리와 코드길이는 더 줄었군 ..
'코딩테스트 > 백준' 카테고리의 다른 글
백준 - 24267 .알고리즘의 수행시간 (0) | 2025.01.29 |
---|---|
백준 - 24265. 알고리즘 수업 - 알고리즘의 수행시간 4 (1) | 2025.01.28 |
백준 - 11653. 소인수 분해 (1) | 2025.01.27 |
백준 - 2581. 소수 (0) | 2025.01.27 |
백준 - 1193. 분수찾기 (0) | 2025.01.25 |