본문으로 바로가기

Description

주어진 함수에서 3줄을 바꿔서 값이 아래와 같이 지그재그가 될 수 있도록 변경하는 문제입니다. 가운데 가장 큰 숫자를 중심으로 왼쪽부터 오름차순, 중앙에서 끝까지 내림차순으로 정렬되는 걸 지그재그 시퀀스라고 합니다.

Solution 1. Array

public static void findZigZagSequence(int [] a, int n){ 
    Arrays.sort(a);
    //int mid = (n + 1)/2;
    int mid = n/2;  //change1
    int temp = a[mid];
    a[mid] = a[n - 1];
    a[n - 1] = temp;

    int st = mid + 1;
    //int ed = n - 1;
    int ed = n - 2;  //change2
    while(st <= ed){
        temp = a[st];
        a[st] = a[ed];
        a[ed] = temp;
        st = st + 1;
//            ed = ed + 1;
        ed = ed - 1;  //change3
    }
    for(int i = 0; i < n; i++){
        if(i > 0) System.out.print(" ");
        System.out.print(a[i]);
    }
    System.out.println();
}
  1. 가장 큰값이 들어갈 가운데 요소(mid) 위치 수정
  2. 맨마지막값이 가운데로 스왑됐으므로 ed의 시작점은 n-2
  3. 오른쪽(ed) 포인터는 한칸씩 가운데로 와서 만날 수 있게 왼쪽(-)으로 이동해야 합니다.

Reference

 

Zig Zag Sequence | HackerRank

Find a zig zag sequence of the given array.

www.hackerrank.com