[C++] 백준 1138 한 줄로 서기

semin·2023년 10월 16일

https://www.acmicpc.net/problem/1138
제목 : 한 줄로 서기
solved.ac 난이도 : Silver II

풀이

입력이 주어질 때 왼쪽부터 1~N 의 순서대로 사람들이 줄을 선 위치가 주어진다.

줄을 새로 세우고 있을 때 이미 세워진 줄을 전부 탐색하여 나보다 큰 사람이 있으면 순위를 하나씩 올려서 나온 최종 순위가 해당 사람이 알고있는 순위와 같으면 줄을 세우는 식으로 풀었습니다.

예제 입력 4번을 예시로 들면
주어진 사람들의 키와 순위는 각각
1 2 3 4 5 6 7
6 1 1 1 2 0 0 입니다.
위에 있는 조건을 따졌을 때 키가 6인 사람이 먼저 앞으로 오게 됩니다.
그리고 그 다음은 각각 2 3 4 가 오게 됩니다.
그 다음으로 5가 올 수도 있지만 5가 먼저 오게 되면 5의 앞에 자신보다 큰 수가 한명밖에 없기 때문에 5가 올 수가 없고 7이 먼저 오게 됩니다.
그리고 5가 들어오고 마지막으로 1이 들어옵니다.
결과적으로 6 2 3 4 7 5 1 이 출력으로 나오게 됩니다.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int N, num, count = 0;
    cin >> N;
    vector<int> line(N + 1, 0);
    vector<int> visit(N + 1, 0);
    vector<int> setline;
    for (int i = 1; i <= N; i++) {
        cin >> num;
        line[i] = num;
    }
    while (count < N) {
        for (int i = 1; i <= N; i++) {
            if (visit[i] == 0) {
                int rank = 0;
                for (int j = 0; j < count; j++) {
                    if (i < setline[j]) rank++;
                }
                if (rank == line[i]) {
                    setline.push_back(i);
                    visit[i] = 1;
                    count++;
                    break;
                }
            }
        }
    }

    for (int i : setline) {
        cout << i << " ";
    }
}

profile
게임 프로그래밍 공부

0개의 댓글