[백준(BOJ)] 줄세우기(10431번)_C++

2024. 3. 15. 18:21Problem Solving/Greedy & 구현

728x90
반응형
SMALL

문제에 주어진 규칙대로 구현하면 되는 문제다.

 

별다르게 어려울 건 없는데 내가 실수하나 했던 부분은

학생들을 뒤로 미루는 작업을 할때 앞에서부터 시작했다.

이렇게 해도 예제는 결과가 올바르게 나와서 왜 틀렸는지 모를 수도 있다.

 

앞에서부터 미루면 다 같은 값으로 미뤄지기 때문에 뒤에서부터 해야한다.

굉장히 당연한 원리이지만 무심코 하기 쉬운 실수라 생각해서 언급해본다.

 


정답 코드

#include <iostream>

using namespace std;

int p, t, arr[20];

int main(){
    cin.tie(NULL);
    cout.tie(NULL);
    ios_base::sync_with_stdio(false);

    cin >> p;

    while (p--){
        cin >> t;

        int walk = 0;
        for (int i = 0; i < 20; i++){

            //insert end
            cin >> arr[i];

            //search first taller
            for (int j = 0; j < i; j++){
                if (arr[i] < arr[j]){
                    //move counter
                    walk += i - j;

                    //back move
                    int temp = arr[i];
                    for (int k = i; k > j; k--)
                        arr[k] = arr[k - 1];
                    arr[j] = temp;
                }
            }
        }

        cout << t << " " << walk << "\n";
    }
}
728x90
반응형
LIST