본문으로 바로가기

Description

배열이 각 요소가 바로 이전 요소보다 한칸 앞으로 swap 할 수 있고 최대 두칸까지만 전진 할 수 있다고 할때 주어진 결과가 몇번만에 이동이 가능한지 여부와 가능 여부를 출력하는 문제입니다.

Solution 1. Arrays

public static void minimumBribes(List<Integer> q) {
    // Write your code here
    for (int i = 0; i < q.size(); i++) {
        if(q.get(i) > i+1+2){
            System.out.println("Too chaotic");
            return;
        }
    }

    int cnt = 0;
    for (int i = 0; i < q.size(); i++) {
         if(q.get(i) > i+1){
            for (int j = i+1; j < q.size(); j++) {
                int temp = q.get(i);
                q.set(i,q.get(j));
                q.set(j,temp);
                cnt++;
                if(q.get(i) == i+1) break;
            }
        }
    }
    System.out.println(cnt);
}

먼저 인덱스보다 최대 두칸이상 진행된 요소가 있다면 해당 케이스는 불가능하기 때문에 Too chaotic을 반환해 줍니다. 이후 맨 앞의 요소 부터 진행하며 현재 인덱스에 맞는 요소가 아닐 경우 해당 값이 아프로 올때까지 뒤로 swap해주며 카운팅 해나갑니다.

Reference

 

New Year Chaos | HackerRank

Determine how many bribes took place to get a queue into its current state.

www.hackerrank.com