알고리즘

백준 1138번 한 줄로 서기 (JAVA)

박카스마시며코딩 2023. 9. 20. 19:39

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

 

1138번: 한 줄로 서기

첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다

www.acmicpc.net

 

저는 구현을 통해 문제를 해결하였습니다.

앞에서부터 앞에 몇개있는지를 보고 몇번째에 있어야 하는지 판단하였습니다.

입력이 키가 작은 순서대로 주기 때문에 앞에서부터 앞에 아무도 없다면 맨앞, 한명 있다면 한칸 뒤로 .... 이렇게 진행됩니다.

그리고 해당 칸에 사람이 있다면 현재 사람보다 키가 작은 사람이기 때문에 한칸 더 뒤로 가서 서있게 됩니다. 

저는 이 방법으로 문제를 해결하였습니다.

 

package BOJ.etc;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.function.Function;
import org.w3c.dom.ls.LSOutput;

public class BOJ_1138 {
    private static final int EMPTY = 0;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Function<String,Integer> stoi = Integer::parseInt;
        int n = stoi.apply(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int[] input = new int[n];
        for(int i = 0 ; i < n ; i++){
            input[i] = stoi.apply(st.nextToken());
        }
        int[] result = new int[n];
        for(int i = 0 ; i < n ; i++){
            int cnt = input[i];
            int index = 0;
            while(cnt > 0){
                if(result[index] == EMPTY){
                    index++;
                    cnt--;
                    continue;
                }
                while(result[index] != EMPTY){
                    index++;
                }
            }
            while(result[index] != EMPTY){
                index++;
            }
            result[index] = i + 1;
//            System.out.println(Arrays.toString(result));
        }
        for(int i = 0 ; i < n ; i++){
            System.out.print(result[i]+" ");
        }
    }

}