본문 바로가기
PS/BOJ

[자바] 백준 4589 - Gnome Sequencing (java)

by Nahwasa 2022. 11. 25.

 문제 : 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();
    }
}

댓글