관리 메뉴

有希

HackerRank/Zig Zag Sequence 본문

프로그래밍/알고리즘+코딩테스트

HackerRank/Zig Zag Sequence

有希. 2022. 3. 30. 02:18

고친 부분:

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