
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();
}
- 가장 큰값이 들어갈 가운데 요소(mid) 위치 수정
- 맨마지막값이 가운데로 스왑됐으므로 ed의 시작점은 n-2
- 오른쪽(ed) 포인터는 한칸씩 가운데로 와서 만날 수 있게 왼쪽(-)으로 이동해야 합니다.
Reference
Zig Zag Sequence | HackerRank
Find a zig zag sequence of the given array.
www.hackerrank.com
'알고리즘 > HackerRank' 카테고리의 다른 글
[HackerLank] Caesar Cipher - 문제풀이 (0) | 2022.03.16 |
---|---|
[HackerLank] Tower Breakers - 문제풀이 (0) | 2022.03.15 |
[HackerLank] Flipping the Matrix - 문제풀이 (0) | 2022.03.15 |
[HackerLank] Counting Sort 1 - 문제풀이 (0) | 2022.03.15 |
[HackerLangk] Diagonal Difference - 문제풀이 (0) | 2022.03.15 |