[백준] 1138: 한 줄로 서기 - JAVA

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

풀이

키가 1인사람부터 N인사람이 순서대로 자기보다 큰 사람이 왼쪽에 몇 명 있는지 주어진다.

즉, 0 0 0 0 이렇게 주어지면 1번사람은 왼쪽에 자기보다 큰 사람이 0명 있으므로 첫 번째 자리에 서있는 것이다.

숫자를 받아 for문을 돌면서 자리가 안채워져 있으면 카운트를 하나씩 한다.

자리가 채워져있으면 넘어간다.

카운트가 입력받은 수와 같으면 그 자리에 해당 사람을 위치시키면 된다.


메모리: 15852KB

시간: 144ms

언어: Java 11

코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] arr = new int[N];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int[] ans = new int[N];
        for (int i = 0; i < N; i++) {
            int cnt = arr[i];
            for (int j = 0; j < N; j++) {
                if (ans[j] != 0) {
                    continue;
                }
                if (cnt == 0) {
                    ans[j] = i + 1;
                    break;
                }
                cnt--;
            }
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < N; i++) {
            sb.append(ans[i] + " ");
        }

        System.out.println(sb);
    }

}