본문 바로가기

백준문제풀이

백준 10775 자바(java) 공항

문제

오늘은 신승원의 생일이다.

박승원은 생일을 맞아 신승원에게 인천국제공항을 선물로 줬다.

공항에는 G개의 게이트가 있으며 각각은 1에서 G까지의 번호를 가지고 있다.

공항에는 P개의 비행기가 순서대로 도착할 예정이며, 당신은 i번째 비행기를 1번부터 gi (1 ≤ gi ≤ G) 번째 게이트중 하나에 영구적으로 도킹하려 한다. 비행기가 어느 게이트에도 도킹할 수 없다면 공항이 폐쇄되고, 이후 어떤 비행기도 도착할 수 없다.

신승원은 가장 많은 비행기를 공항에 도킹시켜서 박승원을 행복하게 하고 싶어한다. 승원이는 비행기를 최대 몇 대 도킹시킬 수 있는가?

입력

첫 번째 줄에는 게이트의 수 G (1 ≤ G ≤ 105)가 주어진다.

두 번째 줄에는 비행기의 수 P (1 ≤ P ≤ 105)가 주어진다.

이후 P개의 줄에 gi (1 ≤ gi ≤ G) 가 주어진다.

출력

승원이가 도킹시킬 수 있는 최대의 비행기 수를 출력한다.

 

 

import java.util.Scanner;

public class Main {
	static int g;
	static int p;
	static boolean[] gArr;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		g = sc.nextInt(); p = sc.nextInt();
		gArr = new boolean[g+1];
		int count = 0;
		for(int i = 0; i<gArr.length; i++) {
			gArr[i] = false; //모두 비행기가 없는 상태로 초기화
		}
		
		for(int i = 0; i<p; i++) {
			int temp = isPlane(sc.nextInt()); //해당 비행기의 인덱스부터 아래로 내려가면서 게이트가 찼는지 조사
			if(temp == -1) break;
			else {
				gArr[temp] = true;
				count++;
			}
		}
		System.out.println(count);
	}
	static int isPlane(int a) {
		for(int i = a; i>0; i--) {
			if(gArr[i]!=true) return i;
		}
		return -1;
	}
}

풀이

문제를 이해하기가 더 어려웠던 문제.

i번째 비행기가 들어오면 i 보다 낮은 게이트에만 도킹시키면 된다.

i번째에 들어온 게이트를 i번째 게이트부터 조사하여 인덱스를 -- 해가면서 비어있는 게이트를 조사 후 비었으면 boolean 배열을 true로 해주고 count 해준다 .

비어있는 인덱스가 없을경우 -1을 리턴해준 후 결과를 출력한다.