문제 풀이/문제 풀이(BOJ)

[Silver V] 10431 - 줄세우기

풀뿌리 2025. 1. 21. 10:03

 

[문제 위치]

https://www.acmicpc.net/problem/10431

 

[문제 풀이]

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int P; // 테스트 케이스 수
    cin >> P;

    for (int i = 0; i < P; i++) {
        int T; // 테스트 케이스 번호
        cin >> T;

        vector<int> heights(20); // 학생들의 키를 저장
        for (int j = 0; j < 20; j++) {
            cin >> heights[j];
        }

        int steps = 0; // 총 물러선 걸음 수

        vector<int> line; // 현재 줄 서있는 상태
        for (int h : heights) {
            // h를 적절한 위치에 삽입
            int position = line.size();
            for (int k = 0; k < line.size(); k++) {
                if (line[k] > h) {
                    position = k; // h가 들어가야 할 위치
                    break;
                }
            }
            steps += line.size() - position; // 뒤로 물러선 학생들의 수
            line.insert(line.begin() + position, h); // h를 삽입
        }

        // 결과 출력
        cout << T << " " << steps << endl;
    }

    return 0;
}