[Softeer] 통근버스 출발 순서 검증하기 JAVA

AMUD·2023년 6월 16일
0

Algorithm

목록 보기
66/78

문제


문제 링크

접근

  • N 범위는 그렇게 크지 않아서 모든 순열을 조회하며 분기하는 풀이를 떠올렸다. 그런데 시간 복잡도가 O(N^3) 수준이라 배제하였다.
  • 백준의 [ 가장 ~~ 수열 ] 시리즈의 접근법이 떠올라 dp를 떠올렸고, 전혀 다른 풀이였지만 해결하였다.
  • 최종적으로 시간복잡도는 O(NlogN)가 되었고, 넉넉하게 통과하였다.

풀이

import java.util.*;
import java.io.*;


public class Main {
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int N = Integer.parseInt(br.readLine());
        int[] nums = new int[N];
        
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) nums[i] = Integer.parseInt(st.nextToken());

        long answer = 0;
        int[] dp;
        for (int i = 0; i < N-2; i++) {
            dp = new int[N];
            int curr = nums[i];

            dp[N-1] = curr < nums[N-1] ? 0 : 1;
            for (int j = N-2; j > i; j--) {
                if (curr > nums[j]) {
                    dp[j] = dp[j+1] + 1;
                    continue;
                }

                dp[j] = dp[j+1];
                answer += dp[j];
            }
        }

        System.out.println(answer);
    }
}
profile
210's Velog :: Ambition Makes Us Diligent

0개의 댓글