문제출처 : https://www.acmicpc.net/problem/1092
code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
static List<Integer> boxes;
static int result=0;
public static void main(String args[]) throws IOException{
int N = Integer.parseInt(br.readLine());
String temp1[]=br.readLine().split(" ");
Integer [] crane = new Integer[N];
for(int i=0;i<N;i++){
crane[i]=Integer.parseInt(temp1[i]);
}
int M = Integer.parseInt(br.readLine());
boxes = new ArrayList<>();
String temp2[]=br.readLine().split(" ");
Integer [] box = new Integer[M];
for(int i=0;i<M;i++){
box[i] = Integer.parseInt(temp2[i]);
boxes.add(box[i]);
}
Arrays.sort(crane,Collections.reverseOrder());
boxes.sort(Collections.reverseOrder());
if(crane[0]<boxes.get(0)) {
System.out.println(-1);
return;
}else{
while(!boxes.isEmpty()){
for(int i=0;i<N;i++){
for(int j=0;j<boxes.size();j++){
if(crane[i]>=boxes.get(j)){
boxes.remove(j);
break;
}
}
}
result++;
}
System.out.println(result);
}
br.close();
}
}
시간초과때문에 애를먹었는데, 알고리즘자체는 별로 어렵지않았던것 같다.
크레인과 박스모두 내림차순으로 정렬한다음, 가장큰 크레인과 가장큰 박스를 비교해서 옮길수없다면 -1을 출력한다.
그게 아니면, 가능한순서대로 옮기고, ArrayList에서 삭제해주면 된다.
크레인과 박스모두 arraylist로 받았을때 시간초과가났는데, 크레인은 그냥 배열로, 박스는 arraylist로 받으니까 시간초과에서 통과되었다. 진짜 간당간당하게 통과된것같은느낌이다...