알고리즘

[백준, 자바, 1015번] 수열 정렬

hminor 2023. 12. 28. 12:01

풀이

  • 해당 문제는 무슨 말인가 하다가 입력값과 출력값을 확인해보니
  • 큰 순서에 따라 번호를 메기는 문제로 파악하여 아래와 같이 해결할 수 있었다.
  • 우선 result는 입력 받는 배열의 크기만큼 생성 후 초기값을 따로 설정하고
  • 이후 2중 for문으로 계속 처음부터 조회할 수 있도록 했으며
  • result[j] 가 초기값 -1이 아닐 경우엔 넘어가고 
  • low 값보다 result[j]가 작다면 변경 후 idx 또한 함께 바꾼다음
  • 반복문이 마치면 그때 result 값을 변경해줘서 문제를 해결.

 

추가 학습

  • 자바에서 ArrayList로 원하는 크기로 초기값을 넣어주고 싶다면
    • new ArrayList<>( Collections.nCopies(num, value)  ) <- 이렇게 작성하면 된다.

 

 

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<>(n);
        for (int i = 0; i < n; i++) li.add(Integer.parseInt(st.nextToken()));
        ArrayList<Integer> result = new ArrayList<>(Collections.nCopies(n,-1));

        for (int i = 0; i < n; i++) {
            int low = 1001;
            int idx = 0;
            for (int j = 0; j < n; j++) {
                if (result.get(j) != -1) continue;
                else if (low > li.get(j)) {
                    low = li.get(j);
                    idx = j;
                }
            }
            result.set(idx,i);
        }
        for (int i = 0; i < n; i++) {
            System.out.print(result.get(i));
            if (i != n-1) System.out.print(" ");
        }
    }
}