본문 바로가기

Algorithm/Baekjoon

[Baekjoon] 백준 11536번: 줄 세우기 (JAVA)

728x90

문제 11536

 

11536번: 줄 세우기

이름이 증가하는 순으로 나타나면 INCREASING, 감소하는 순이면 DECREASING을 한 줄에 출력한다. 만약 위의 두 경우가 아니라면 NEITHER를 출력한다.

www.acmicpc.net

[ 문제 풀이 ]

입력받은 문자열이 내림차순인지 오름차순인지, 아니면 내림차순도 오름차순도 아닌 것인지 체크하는 문제입니다. 먼저, 입력받은 문자열을 String[] 배열에 저장하고, 0번째 인덱스와 1번째 인덱스를 확인해서 오름차순인지 내림차순인지 확인합니다. isIncrease 라는 boolean 타입의 변수를 생성하여 오름차순이면 true, 내림차순이면 false로 저장합니다.

이후 1번째 인덱스부터 (String[] 배열의 길이 - 1) 만큼 순회하며 정렬 기준이 유지되는지 확인해줍니다. 만약, isIncrease = true 인 상태에서, 배열 순회를 돌다가 현재 인덱스의 문자열이 다음 인덱스의 문자열보다 크다면 오름차순 정렬이 유지되지 않으므로 'NEITHER' 를 출력합니다. 반대의 경우도 성립합니다.

정렬이 유지될 경우 처음 설정해주었던 isIncrease 값을 출력하면 됩니다.

[ 코드 ]

import java.io.*;

public class Main {
    private static int N;
    private static String[] arr;
    private static boolean isIncrease;
    private static boolean neither = false;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        N = Integer.parseInt(br.readLine());
        arr = new String[N];

        for (int i = 0; i < N; i++) {
            String s = br.readLine();
            arr[i] = s;
        }

        isIncrease = arr[0].compareTo(arr[1]) < 0;
        checkString(arr);

        if (neither) {
            bw.write("NEITHER");
        } else {
            if (isIncrease) bw.write("INCREASING");
            else bw.write("DECREASING");
        }
        bw.flush();
    }

    private static void checkString(String[] s) {
        for (int i = 1; i < N-1; i++) {
            if (s[i].compareTo(s[i+1]) > 0) { // 내림차순
                if (isIncrease) {
                    neither = true;
                    break;
                }
            } else { // 오름차순
                if (!isIncrease) {
                    neither = true;
                    break;
                }
            }
        }
    }
}
728x90