알고리즘

[백준, 자바, 1138번] 한 줄로 서기

hminor 2023. 12. 26. 12:56

풀이

  • 해당 알고리즘에 대해 어떻게 접근해야할지에 대한 고민을 오래했지만
  • 잘 떠오르지 않아서 다른 분들의 풀이를 확인 후 조금씩 이해할 수 있었다.
  • 우선 가장 문제였던 부분이 아래와 같다.
    • 나의 키보다 큰 사람이 왼쪽에 입력 받은 수 만큼 있어야 하는 것.
    • 입력 받은 수가 같을 경우.
  • 그래서 다른 분들의 풀이를 참고하여 이해할 수 있었지만 
  • 해당 유형과 비슷한 문제들을 좀 더 풀어봐야 확실한 이해를 할 수 있을것 같다.
  • 우선 위 문제였던 부분에 대한 해결법으로는 
    • 조건식을 통해 cnt와 입력 받은 값이 같은지 그리고 result[j]의 값이 아직 채워지지 않았는지 확인.

 

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

public class 한줄로서기 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        ArrayList<Integer> li = new ArrayList<>();
        ArrayList<Integer> result = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            li.add(Integer.parseInt(st.nextToken()));
            result.add(0);
        }

        for (int i = 0; i < n; i++) {
            int cnt = 0;
            for (int j = 0; j < n; j++) {
                if (cnt == li.get(i) && result.get(j) == 0) {
                    result.set(j,i+1);
                    break;
                } else if (result.get(j) == 0) cnt ++;
            }
        }

        for (int i = 0; i < n; i++) {
            if (i != n-1) System.out.print(result.get(i) + " ");
            else System.out.print(result.get(i));
        }

    }
}