백준 1138 한 줄로 서기

이상민·2023년 8월 31일
0

알고리즘

목록 보기
35/128
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Stand_In_One_Line {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int[] arr = new int[N];
        st = new StringTokenizer(br.readLine());
        for (int i = 1; i < N+1; i++) {
            int index = Integer.parseInt(st.nextToken());
            int count = 0;
            for (int j = 0; j < N; j++) {
                if(arr[j]!=0)
                    continue;
                else
                    count++;
                if(count==index+1){
                    arr[j] = i;
                    break;
                }
            }

        }
        for (int i = 0; i < N; i++) {
            System.out.print(arr[i]+" ");

        }

    }
}

풀이방법

  1. for문을 돌며, 왼쪽에 입력값만큼 나보다 큰사람을 세웠다고 가정하고 지나친다.
    입력값이 2라면 나보다 큰사람 두명을 지나치고 그다음 인덱스에 내가 선다.
  2. 앞에서 채워진 배열은 나보다 작은 사람이므로, count하지 않고,
    0이 들어간 배열만 입력값 만큼 count하고 (나보다 큰사람을 세우고) 다음 빈 인덱스에 내가 선다.
  3. 이를 반복한다.

후기

사실 문제를 보고는 도저히 규칙을 못찾았다.
입력예시, 출력예시를 보고 규칙을 찾았고, 찾은 규칙을 막상 구현하는것도 생각보다 까다로웠다.
블로그에 정리해서 쓰는것도 까다롭다..
코딩이 어려운 문제였다기 보단, 수학적인 규칙 찾기가 어려웠던 문제같다. 아닌가

profile
개린이

0개의 댓글