Notice
Recent Posts
문제 풀이 및 개발 공간
[백준] 1092번 배 (gold 5 본문
전에 업로드한 문제 코드 이지만, 이번에 작성한게 차이가 클 정도로 훨씬 효율적이라 코드만 재업로드 하려 한다.
//이번
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n=Integer.valueOf(br.readLine());
int[] num=new int[n];
st=new StringTokenizer(br.readLine());
for(int i=0; i<n; i++){
num[i]=Integer.valueOf(st.nextToken());
}
Arrays.sort(num);
int[] carry=new int[n];
int m=Integer.valueOf(br.readLine());
st=new StringTokenizer(br.readLine());
PriorityQueue<Integer >que= new PriorityQueue<>(Collections.reverseOrder());
for(int i=0; i<m; i++){
que.offer(Integer.valueOf(st.nextToken()));
}
if(num[n-1]<que.peek()){
bw.write("-1");
}
else{
boolean go=true;
while(true){
go=true;
if(!que.isEmpty()) {
que.poll();
carry[n - 1]++;
}
else{
break;
}
for(int i=n-2; i>=0; i--){
int temp=carry[n-1]-carry[i];
for(int j=0; j<temp; j++){
if(!que.isEmpty() && que.peek() <= num[i]){
carry[i]++;
que.poll();
}
else{
go=false;
break;
}
}
if(!go){
break;
}
}
}
bw.write(carry[n-1]+"");
}
bw.flush();
}
}
//저번
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
ArrayList<Integer> crane = new ArrayList<>();
st = new StringTokenizer(br.readLine());
//크레인 저장,
for (int i = 0; i < n; i++) {
crane.add(Integer.parseInt(st.nextToken()));
}
Collections.sort(crane);
//화역물
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
ArrayList<Integer> box = new ArrayList<>();
for (int i = 0; i < m; i++) {
box.add(Integer.parseInt(st.nextToken()));
}
//화역물 정렬
Collections.sort(box);
int total=0;
if (box.get(box.size()-1) > crane.get(crane.size()-1)) {
bw.write(-1 + "");
bw.flush();
}
else{
while(true) {
int j=box.size()-1;
if(j==-1){
break;
}
for (int i = (crane.size() - 1); i >= 0; i--) {
for (; j >= 0; ) {
if (crane.get(i) >= box.get(j)) {
box.remove(j);
j-=1;
break;
}
else{
j--;
}
}
}
total++;
}
bw.write(total+"");
bw.flush();
}
}
}
가장 큰 차이는 전에는 무게값이 높은 크레인 부터 낮을때까지 하나씩 빼오고 하나씩 또 쭉 빼면서 계속 반복문을 수행했으나,
이번에는 가장 큰 무게값이 빼온 값만큼, 밑에서 빼오도록 시키면서 점점 박스의 수를 없앴다.
'백준공부 > java' 카테고리의 다른 글
[백준] 1500번 최대 곱 (silver 2 (0) | 2023.10.06 |
---|---|
[백준] 5567번 결혼식 (silver 2 (0) | 2023.10.06 |
[백준] 4158번 CD (silver 5 (0) | 2023.10.05 |
[백준] 1026번 보물 (silver 4 (0) | 2023.10.05 |
[백준] 1987번 알파벳 (gold 4 (0) | 2023.10.05 |