본문 바로가기
알고리즘 문제

[알고리즘 문제] 백준1138 - 한 줄로 서기

by 박연호의 개발 블로그 2019. 6. 15.

문제 해결방법은,

1. arr[입력크기]를 만들고 각 인덱스는 N키를, 인덱스의 값은 N키에서 왼쪽에 있는 자기보다 키가 큰 사람의 수.

2. arr[]에서 인덱스의 값이 0인 부분은 자신보다 키가 큰 부분.

3. 단, arr[0]부터 arr.length까지 반복하면서, 인덱스의 값이 0이면 M(입력받은 값)을 하나 빼준다. 그리고 M=0이면, 나보다 큰 값을 모두 건너왔음을 의미, 해당 인덱스에 N값을 넣어준다.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int[] arr = new int[n];
        int leftCount;

        for (int val = 0; val < n; val++) {
            leftCount = sc.nextInt();

            for (int i = 0; i < n; i++) {
                // N보다 키가 큰 사람을 모두 건너왔고, arr[i]에 아무런 숫자가 없다면
                if (leftCount == 0 && arr[i] == 0) {
                    arr[i] = val + 1;
                    break;
                    // N키보다 키가 큰 부분
                } else if (arr[i] == 0) {
                    leftCount--;
                }
            }
        }

        for (int f : arr) {
            System.out.print(f + " ");
        }
    }
}