풀이코드
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 문으로 작성한 방법이다. 단계적으로 검사하는 방식이 아니어서 비교적 코드 실행 시간이 짧다.
'알고리즘(코딩테스트)' 카테고리의 다른 글
백준 2162번 카드2(JAVA) (0) | 2024.03.06 |
---|---|
백준 2292번 벌집(JAVA) (0) | 2024.03.04 |
백준 23971번 ZOAC 4(JAVA) (1) | 2024.02.27 |
백준 1655번 가운데를 말해요 (0) | 2023.05.09 |
백준 1912번 연속합(JAVA) (0) | 2022.03.02 |
댓글