1. 문제

www.acmicpc.net/problem/1138

 

1138번: 한 줄로 서기

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

www.acmicpc.net

2. 접근방법

키 순서대로 내 앞에 나보다 큰 사람이 몇명 있는지 입력으로 주어진다.

 

즉 그냥 내 앞에 나보다 큰 사람들이 들어올 자리만큼 비워주고 그 다음 자리에 내가 서면 된다.

 

예제를 보면

 

1번 앞에 자기보다 큰 사람 2명이 있어야 하니

자기보다 큰 사람 2명이 설 자리를 놔두고 3번째 자리에 들어가면 된다.

만약 4번째 자리에 가게 되면

나머지 사람들이 다 나보다 키가 크니 내 앞에 키 큰 사람 3명이 되어서 불가능하다.

 

그 다음으로 2번 앞에 1명이 있어야하니

한자리를 비우고 

3번 앞에도 1명이 있으니

한자리를 비우고 그 다음 빈자리로 들어간다.

마지막으로 4번은 앞에 0명이니

남은 자리로 바로 들어가면 된다.

3. 자바 코드

package Silver;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class P1138한줄서기 {
	
	public static void main(String[] args) throws Exception {
		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];
		boolean visit[] = new boolean[N];
		st = new StringTokenizer(br.readLine());
		for(int i = 0 ; i < N ; i++) {
			int n = Integer.parseInt(st.nextToken());
			int cnt = 0;
			for(int j = 0 ; j < N ; j++) {
				if(!visit[j]) {
					if(cnt == n) {
						visit[j] = true;
						arr[j] = i+1;
						break;
					}
					cnt++;
				}
			}
		}
		StringBuilder sb = new StringBuilder();
		for(int i = 0 ; i < N ; i++)
			sb.append(arr[i]+" ");
		System.out.println(sb);
	}

}

4. 마치며

나쁘지 않은 문제였다.

 

 

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준] 1748 수 이어 쓰기1  (0) 2021.03.15
[백준] 2947 나무 조각  (0) 2021.03.15
[백준] 2847 게임을 만든 동준이  (1) 2021.03.05
[백준] 14725 개미굴  (1) 2021.02.26
[백준] 2447 별 찍기 - 10  (2) 2021.02.25

+ Recent posts