Java

[백준 1138] 한 줄로 서기 (JAVA)

iheeeee6-6 2023. 4. 26. 16:17
728x90

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

 

1138번: 한 줄로 서기

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

www.acmicpc.net

 

구현문제로, 해결법을 생각해내기가 조금 어려웠다..

ArrayList iint배열을 만들어서  넣는 방식으로도 도전해봤는데 시간초과가 발생하였다..

결국 int배열로, 입력 받을때마다 빈자리는 양보하면서 자리 배치를 하였다.

 

왼쪽에 2명 있다는 입력을 받으면, 

-> 1번째 자리가 비어있다면 한명에게 자리 양보하니까 왼쪽 (현재 왼쪽 인원수 2) -1 

     2번째 자리도 비어있다면 또 양보하니까 (현재 왼쪽 인원수 1) -1

     3번째 자리가 비어있다면 현재 왼쪽 인원수는 0이나까 이 자리가 바로 해당 사용자의 자리

     만약, 3번째 자리가 차있다면 사용자보다 키가 작은 사람의 자리이니까 다음 자리 번호로 가서 비어있는지 

     확인하기!

 

 

이런식으로 진행해나가면 된다.

 

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

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		int[] arr = new int[n + 1];
		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 1; i <= n; i++) { // 현재번호
			int left = Integer.parseInt(st.nextToken());
			for (int j = 1; j <= n; j++) { // 자리 번호
				if (left == 0 && arr[j] == 0) {
					arr[j] = i; // 자리배치
					break;
				} else if (arr[j] == 0) { // 자리 양보
					left--;
				}
			}
		}

		StringBuilder sb = new StringBuilder();
		for (int i = 1; i <= n; i++) {
			sb.append(arr[i]).append(" ");
		}

	}

}

'Java' 카테고리의 다른 글

[백준 1976] 여행가자 (JAVA)  (0) 2023.04.27
[백준 24337] 가희와 탑 (JAVA)  (0) 2023.04.27
[백준 13549] 숨바꼭질 3 (JAVA)  (0) 2023.04.25
[백준 20437] 문자열 게임2 (JAVA)  (0) 2023.04.25
[백준 1446] 지름길 (JAVA)  (0) 2023.04.24