문제 : boj4589
필요 알고리즘 개념
- 구현
- 문제에 제시된 대로 구현할 수 있다면 풀 수 있다.
※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.
풀이
1. 원본 배열 A를 그대로 두고, 원본과 동일한 데이터를 담은 배열B를 하나 더 준비한다.
2. B를 오름차순으로 정렬한 후 A와 B의 데이터가 동일한지 확인한다.
3. B를 내림차순으로 정렬한 후 A와 B의 데이터가 동일한지 확인한다.
4. 2 또는 3 둘 중 하나가 만족한다면 Ordered, 둘 다 만족하지 않는다면 Unordered를 출력해준다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
private boolean isEqualArrayList(ArrayList<Integer> arr, ArrayList<Integer> sortedArr) {
for (int i = 0; i < arr.size(); i++) {
if (arr.get(i) != sortedArr.get(i))
return false;
}
return true;
}
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder("Gnomes:\n");
while (n-->0) {
StringTokenizer st = new StringTokenizer(br.readLine());
ArrayList<Integer> arr = new ArrayList<>();
ArrayList<Integer> sortedArr = new ArrayList<>();
while (st.hasMoreTokens()) {
int cur = Integer.parseInt(st.nextToken());
arr.add(cur);
sortedArr.add(cur);
}
Collections.sort(sortedArr);
boolean chk = isEqualArrayList(arr, sortedArr);
Collections.sort(sortedArr, Collections.reverseOrder());
chk = chk || isEqualArrayList(arr, sortedArr);
sb.append(chk ? "Ordered" : "Unordered").append('\n');
}
System.out.print(sb);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 6131 - 완전 제곱수 (java) (0) | 2022.11.25 |
---|---|
[자바] 백준 2720 - 세탁소 사장 동혁 (java) (0) | 2022.11.25 |
[자바] 백준 17863 - FYI (java) (0) | 2022.11.25 |
[자바] 백준 21964 - 선린인터넷고등학교 교가 (java) (0) | 2022.11.25 |
[자바] 백준 17387 - 선분 교차 2 (java) (0) | 2022.11.25 |
댓글