有希
HackerRank/Zig Zag Sequence 본문
고친 부분:
int mid = (n+1)/2;
int ed = n - 1;
ed = ed + 1;
1 2 3 4 5 6 7 8 9 10 11 을 생각해보자
일단. mid를 저렇게 정하면 한 칸 오른쪽으로 가버린다.
그리고 mid와 끝을 바꾸면 1 2 3 4 5 11 7 8 9 10 6 이 된다.
아래 while을 보면 swap해주고 있음을 알 수 있다.
문제처럼 바꾸려면 6은 냅두고 7 10을 바꾸고 8 9를 바꾸면 된다는 걸 음...한 번 코드를 따라가보면 잘못된 코드지만 직관을 얻을 수 있다.
그러면 어디를 수정해야 할지가 뻔히 보인다. 처음 int ed를 정하는 부분에서 n-1을 하면 6이 걸리니 n-2로 해줘야 하고,
바꿀 때마다 st는 한 칸 오른쪽으로 ed는 한 칸 왼쪽으로 가야 함을 알 수 있다. while문 안에서 ed - 1로 수정해준다.
그러면 딱 3줄 바꿨다. testcase도 전부 통과했다.
void findZigZagSequence(vector < int > a, int n){
sort(a.begin(), a.end());
int mid = n/2;
swap(a[mid], a[n-1]);
int st = mid + 1;
int ed = n - 2;
while(st <= ed){
swap(a[st], a[ed]);
st = st + 1;
ed = ed - 1;
}
for(int i = 0; i < n; i++){
if(i > 0) cout << " ";
cout << a[i];
}
cout << endl;
}
'프로그래밍 > 알고리즘+코딩테스트' 카테고리의 다른 글
HackerRank/Caesar Cipher (0) | 2022.04.02 |
---|---|
Hacker Rank/Tower Breakers (0) | 2022.04.02 |
HackerRank/Flipping the Matrix (0) | 2022.03.30 |
HackerRank/Counting Sort 1 (0) | 2022.03.29 |
HackerRank/Diagonal Difference (0) | 2022.03.29 |