헝D의 일기장
article thumbnail

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

 

1138번: 한 줄로 서기

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

www.acmicpc.net

 

나의풀이

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String args[]) throws Exception{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        int n= Integer.parseInt(br.readLine());
        int[] arr=new int[n];
        Arrays.fill(arr, 0); //초기화
        
        StringTokenizer st=new StringTokenizer(br.readLine());
        for(int i=0;i<n;i++){
            int key=i+1; //키
            int temp=Integer.parseInt(st.nextToken()); // 자기보다 키가 큰 왼쪽 사람 수
            
            if(key==n){
                for(int k=0;k<n;k++){
                    if(arr[k]==0){
                        arr[k]=key;
                        break;
                    }
                }
            }else{
                int empty=n-key-temp; //뒤에 남아야하는 빈칸
            
                for(int j=n-1 ; j>=0 ; j--){
                    if(arr[j]==0 && empty==0){
                        arr[j]=key;
                        break;
                }
                if(arr[j]==0){//빈칸인 경우만 
                    empty--;
                }
            } 
          }
        }
        for(int a:arr){
            bw.write(Integer.toString(a)+" ");

        }
        bw.close();
      
    }
}

 

내가 생각한 방법

'4'   '2 '   '1'   ' 3' 
1 -> 4-1= 3개 남음. 3-2=1 뒤에 빈거 1칸
2 -> 4-2= 2개 남음. 2-1=1 뒤에 빈거 1칸 
3 -> 4-3= 1개 남음. 1-1=0 뒤에 빈거 0칸 
4 -> 4-4= 0개 남음. 0-0=0 뒤에 빈거 0칸


'6'  '2'  '3'  '4'  '7'  '5'  '1'
1 -> 7-1= 6개남음. 6-6=0 뒤에 빈거 0칸 
2 -> 7-2= 5개남음. 5-1=4 뒤에 빈거 4칸
3 -> 7-3= 4개남음. 4-1=3 뒤에 빈거 3칸
4 -> 7-4= 3개남음. 3-1=2 뒤에 빈거 2칸
5 -> 7-5= 2개남음. 2-2=0 뒤에 빈거 0칸
6 -> 7-6= 1개남음. 1-0=1 뒤에 빈거 1칸
7 -> 7-7= 0개남음. 마지막 남은곳.

profile

헝D의 일기장

@헝D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!