
문제
백준 9366번 삼각형 분류

내 풀이 1 : 틀렸습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int num = Integer.parseInt(br.readLine());
String answer = "";
for (int i = 1; i <= num; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int numA = Integer.parseInt(st.nextToken());
int numB = Integer.parseInt(st.nextToken());
int numC = Integer.parseInt(st.nextToken());
int max = Math.max(Math.max(numA, numB),numC);
int sum = numA + numB + numC;
if (numA == numB && numB == numC){
answer = "equilateral";
}else if(numA == numB){
answer = "isosceles";
}else if (numB == numC){
answer = "isosceles";
}else if(numA == numC){
answer = "isosceles";
}else if((sum - max > max) && (numA != numB) && (numA != numC)){
answer = "scalene";
}else{
answer = "invalid!";
}
sb.append("Case #").append(i).append(": ").append(answer).append("\n");
}
System.out.println(sb.toString());
}
}
내 풀이 2 : 정답
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int num = Integer.parseInt(br.readLine());
String answer = "";
for (int i = 1; i <= num; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int numA = Integer.parseInt(st.nextToken());
int numB = Integer.parseInt(st.nextToken());
int numC = Integer.parseInt(st.nextToken());
int max = Math.max(Math.max(numA, numB),numC);
int sum = numA + numB + numC;
if (sum - max > max){
if (numA == numB && numB == numC){
answer = "equilateral";
}else if(numA == numB){
answer = "isosceles";
}else if (numB == numC){
answer = "isosceles";
}else if(numA == numC){
answer = "isosceles";
}else if((numA != numB) && (numA != numC)){
answer = "scalene";
}else{
answer = "invalid!";
}
}else{
answer = "invalid!";
}
sb.append("Case #").append(i).append(": ").append(answer).append("\n");
}
System.out.println(sb.toString());
}
}
느낀점
삼각형이 되기 위한 조건은 가장 긴 변보다 나머지 두 변의 합이 더 길어야 한다는 점이다.
a, b, c변이 있고 a변이 가장 길 때 b+c의 합이 a보다 커야하고
일단 삼각형이 유효한지 먼저 판별한 뒤 분기하는 것이었다.
조건을 쓸 때에 우선순위를 잘 판별하자!