알고리즘(코딩테스트)
백준 5073번 삼각형과 세 변(JAVA)
qbang
2024. 2. 28. 22:50
5073번: 삼각형과 세 변
각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오.
www.acmicpc.net
풀이코드
ArrayList 활용
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
ArrayList<Integer> list = new ArrayList<>();
int x, y, z = 0;
String s;
while (true) {
st = new StringTokenizer(br.readLine(), " ");
list.clear();
list.add(Integer.parseInt(st.nextToken()));
list.add(Integer.parseInt(st.nextToken()));
list.add(Integer.parseInt(st.nextToken()));
Collections.sort(list);
x = list.get(0);
y = list.get(1);
z = list.get(2);
if (x + y + z == 0) {
break;
}
if (z >= x + y) {
s = "Invalid";
} else {
s = "Scalene";
if (x == y || y == z) {
s = "Isosceles";
if (x == y && y == z) {
s = "Equilateral";
}
}
}
bw.write(s);
bw.newLine();
}
bw.flush();
}
}
조건문 나열
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int x, y, z = 0;
String s = "";
while (true) {
st = new StringTokenizer(br.readLine(), " ");
x = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
z = Integer.parseInt(st.nextToken());
if (x + y + z == 0) {
break;
}
if (z >= x + y || x >= y + z || y >= x + z) {
s = "Invalid";
} else if (x != y && y != z && x != z) {
s = "Scalene";
} else if ((x == y && y != z) || (x == z && z != y) || (y == z && z != x)) {
s = "Isosceles";
} else if (x == y && y == z && x == z) {
s = "Equilateral";
}
bw.write(s);
bw.newLine();
}
bw.flush();
}
}
풀이과정
문제에 있는 조건을 코드로 그대로 표현하면 해결할 수 있는 문제이다.
나는 세 변의 길이를 정렬을 해서 풀이해보았다가(ArrayList 활용 방법), 조건을 나열해서 풀이하는 방법이 시간복잡도 면에서 더 나은 것을 보고 두 번 채점을 진행하였다.
ArrayList 활용
- 세 변의 길이를 정렬
- 제일 긴 변의 길이가 나머지 변의 길이 합보다 크면 삼각형이 성립할 수 없음 -> Invalid
- 2번에서 걸리지만 않으면 최소한 삼각형의 형태는 띌 수 있음 -> Scalene
- 최소한 삼각형의 형태는 띄지만 두 변의 길이가 같으면 -> Isosceles
- 심지어 세 변의 길이가 같으면 -> Equilateral
해당 방법의 경우는 Isosceles, Equilateral를 판단하려면 조건문을 여러번 타면서 체크해야 한다는 단점이 있다. 그래서 시간복잡도가 다소 높게 나온 듯 하다.
조건문 나열
문제에 있는 조건을 정말 고대로 if 문으로 작성한 방법이다. 단계적으로 검사하는 방식이 아니어서 비교적 코드 실행 시간이 짧다.