[Java]白俊1931号[会議室手配]Java
白駿1931号.
https://www.acmicpc.net/problem/1931
質問する
https://www.acmicpc.net/problem/1931
質問する
会議室があり、それを使用するN個の会議について、会議室使用表を作成します.各会議Iには、開始時間と終了時間があり、各会議が重複しないように、会議室の最大数を見つけます.しかし、会議が始まると、途中で中断することはできません.一つの会議が終わると同時に、次の会議が始まる可能性があります.会議の開始時間と終了時間は同じかもしれません.この場合、最初から終わっていると考えられます.
入力
1行目には、会議数N(1≦N≦100000)が与えられる.2行目からN+1行目までは各会議の情報が与えられ、これはスペースであり、会議の開始時間と終了時間を与える.開始時間および終了時間は、231−1の自然数または0以下である.
しゅつりょく
最初の行の最大使用可能な会議数を出力します.
入力例1 11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14
サンプル出力1 4
考える
問題を解くときは難しくないが,考えれば考えるほど複雑になる.
他の人のコードと解答を参考にして解答しました.
リファレンスプール
他の人のコードや解答を見ると、完全にその通りにするよりも、
私たちは少し努力して修正し、理解する必要があると思います.
Timeclassを作成してオブジェクト型リストを作成しました
アクション
解答を見終わったら、これは難題ではないと思います.
会議室の終了時間に合わせてソートするだけです.
終了時間が同じであれば、開始時間に応じて
2つの基準を設定して並べ替えるだけで、問題を十分に解決できます.
Collectionsインタフェースのsort関数をComparatorインタフェースを使用して再定義すればよい.
それからgreedy関数から始めます.if(prev_end_time <= time.start) {
prev_end_time = time.end;
count++;
}
会議の終了時間を開始時間以上に設定します.
重ならず、最も早く会議を開始する会議を選択させます.
そして、直前の会議終了時の会議時間に応じて、会議終了時の時間をcount
を増やすと、できるだけ多くの会議回数が得られます.
TMI
Greedyアルゴリズムは、他の人のコードを表示および解読するのは初めてです.
やっぱり世界には達人がたくさん...
コード#コード# import java.io.*;
import java.util.*;
import java.util.Comparator;
public class Main {
static List<Time> list = new ArrayList<>();
static int N;
static class Time {
int start;
int end;
public Time(int start, int end) {
this.start = start;
this.end = end;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
list.add(new Time(start, end));
}
compare_sort();
greedy();
} // End of main
static void compare_sort() {
Collections.sort(list, new Comparator<Time>() {
@Override
public int compare(Main.Time o1, Main.Time o2) {
if(o1.end == o2.end) {
return o1.start - o2.start;
}
return o1.end - o2.end;
}
});
}
static void greedy() {
int count = 0;
int prev_end_time = 0;
for(int i=0; i<N; i++) {
Time time = list.get(i);
if(prev_end_time <= time.start) {
prev_end_time = time.end;
count++;
}
}
System.out.println(count);
} // End of greedy
} // End of class
Reference
この問題について([Java]白俊1931号[会議室手配]Java), 我々は、より多くの情報をここで見つけました
https://velog.io/@lifeisbeautiful/Java-백준-1931번-회의실-배정-자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
1行目には、会議数N(1≦N≦100000)が与えられる.2行目からN+1行目までは各会議の情報が与えられ、これはスペースであり、会議の開始時間と終了時間を与える.開始時間および終了時間は、231−1の自然数または0以下である.
しゅつりょく
最初の行の最大使用可能な会議数を出力します.
入力例1 11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14
サンプル出力1 4
考える
問題を解くときは難しくないが,考えれば考えるほど複雑になる.
他の人のコードと解答を参考にして解答しました.
リファレンスプール
他の人のコードや解答を見ると、完全にその通りにするよりも、
私たちは少し努力して修正し、理解する必要があると思います.
Timeclassを作成してオブジェクト型リストを作成しました
アクション
解答を見終わったら、これは難題ではないと思います.
会議室の終了時間に合わせてソートするだけです.
終了時間が同じであれば、開始時間に応じて
2つの基準を設定して並べ替えるだけで、問題を十分に解決できます.
Collectionsインタフェースのsort関数をComparatorインタフェースを使用して再定義すればよい.
それからgreedy関数から始めます.if(prev_end_time <= time.start) {
prev_end_time = time.end;
count++;
}
会議の終了時間を開始時間以上に設定します.
重ならず、最も早く会議を開始する会議を選択させます.
そして、直前の会議終了時の会議時間に応じて、会議終了時の時間をcount
を増やすと、できるだけ多くの会議回数が得られます.
TMI
Greedyアルゴリズムは、他の人のコードを表示および解読するのは初めてです.
やっぱり世界には達人がたくさん...
コード#コード# import java.io.*;
import java.util.*;
import java.util.Comparator;
public class Main {
static List<Time> list = new ArrayList<>();
static int N;
static class Time {
int start;
int end;
public Time(int start, int end) {
this.start = start;
this.end = end;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
list.add(new Time(start, end));
}
compare_sort();
greedy();
} // End of main
static void compare_sort() {
Collections.sort(list, new Comparator<Time>() {
@Override
public int compare(Main.Time o1, Main.Time o2) {
if(o1.end == o2.end) {
return o1.start - o2.start;
}
return o1.end - o2.end;
}
});
}
static void greedy() {
int count = 0;
int prev_end_time = 0;
for(int i=0; i<N; i++) {
Time time = list.get(i);
if(prev_end_time <= time.start) {
prev_end_time = time.end;
count++;
}
}
System.out.println(count);
} // End of greedy
} // End of class
Reference
この問題について([Java]白俊1931号[会議室手配]Java), 我々は、より多くの情報をここで見つけました
https://velog.io/@lifeisbeautiful/Java-백준-1931번-회의실-배정-자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
11
1 4
3 5
0 6
5 7
3 8
5 9
6 10
8 11
8 12
2 13
12 14
サンプル出力1 4
考える
問題を解くときは難しくないが,考えれば考えるほど複雑になる.
他の人のコードと解答を参考にして解答しました.
リファレンスプール
他の人のコードや解答を見ると、完全にその通りにするよりも、
私たちは少し努力して修正し、理解する必要があると思います.
Timeclassを作成してオブジェクト型リストを作成しました
アクション
解答を見終わったら、これは難題ではないと思います.
会議室の終了時間に合わせてソートするだけです.
終了時間が同じであれば、開始時間に応じて
2つの基準を設定して並べ替えるだけで、問題を十分に解決できます.
Collectionsインタフェースのsort関数をComparatorインタフェースを使用して再定義すればよい.
それからgreedy関数から始めます.if(prev_end_time <= time.start) {
prev_end_time = time.end;
count++;
}
会議の終了時間を開始時間以上に設定します.
重ならず、最も早く会議を開始する会議を選択させます.
そして、直前の会議終了時の会議時間に応じて、会議終了時の時間をcount
を増やすと、できるだけ多くの会議回数が得られます.
TMI
Greedyアルゴリズムは、他の人のコードを表示および解読するのは初めてです.
やっぱり世界には達人がたくさん...
コード#コード# import java.io.*;
import java.util.*;
import java.util.Comparator;
public class Main {
static List<Time> list = new ArrayList<>();
static int N;
static class Time {
int start;
int end;
public Time(int start, int end) {
this.start = start;
this.end = end;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
list.add(new Time(start, end));
}
compare_sort();
greedy();
} // End of main
static void compare_sort() {
Collections.sort(list, new Comparator<Time>() {
@Override
public int compare(Main.Time o1, Main.Time o2) {
if(o1.end == o2.end) {
return o1.start - o2.start;
}
return o1.end - o2.end;
}
});
}
static void greedy() {
int count = 0;
int prev_end_time = 0;
for(int i=0; i<N; i++) {
Time time = list.get(i);
if(prev_end_time <= time.start) {
prev_end_time = time.end;
count++;
}
}
System.out.println(count);
} // End of greedy
} // End of class
Reference
この問題について([Java]白俊1931号[会議室手配]Java), 我々は、より多くの情報をここで見つけました
https://velog.io/@lifeisbeautiful/Java-백준-1931번-회의실-배정-자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
4
問題を解くときは難しくないが,考えれば考えるほど複雑になる.
他の人のコードと解答を参考にして解答しました.
リファレンスプール
他の人のコードや解答を見ると、完全にその通りにするよりも、
私たちは少し努力して修正し、理解する必要があると思います.
Timeclassを作成してオブジェクト型リストを作成しました
アクション
解答を見終わったら、これは難題ではないと思います.
会議室の終了時間に合わせてソートするだけです.
終了時間が同じであれば、開始時間に応じて
2つの基準を設定して並べ替えるだけで、問題を十分に解決できます.
Collectionsインタフェースのsort関数をComparatorインタフェースを使用して再定義すればよい.
それからgreedy関数から始めます.
if(prev_end_time <= time.start) {
prev_end_time = time.end;
count++;
}
会議の終了時間を開始時間以上に設定します.重ならず、最も早く会議を開始する会議を選択させます.
そして、直前の会議終了時の会議時間に応じて、会議終了時の時間を
count
を増やすと、できるだけ多くの会議回数が得られます.TMI
Greedyアルゴリズムは、他の人のコードを表示および解読するのは初めてです.
やっぱり世界には達人がたくさん...
コード#コード# import java.io.*;
import java.util.*;
import java.util.Comparator;
public class Main {
static List<Time> list = new ArrayList<>();
static int N;
static class Time {
int start;
int end;
public Time(int start, int end) {
this.start = start;
this.end = end;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
list.add(new Time(start, end));
}
compare_sort();
greedy();
} // End of main
static void compare_sort() {
Collections.sort(list, new Comparator<Time>() {
@Override
public int compare(Main.Time o1, Main.Time o2) {
if(o1.end == o2.end) {
return o1.start - o2.start;
}
return o1.end - o2.end;
}
});
}
static void greedy() {
int count = 0;
int prev_end_time = 0;
for(int i=0; i<N; i++) {
Time time = list.get(i);
if(prev_end_time <= time.start) {
prev_end_time = time.end;
count++;
}
}
System.out.println(count);
} // End of greedy
} // End of class
Reference
この問題について([Java]白俊1931号[会議室手配]Java), 我々は、より多くの情報をここで見つけました
https://velog.io/@lifeisbeautiful/Java-백준-1931번-회의실-배정-자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.io.*;
import java.util.*;
import java.util.Comparator;
public class Main {
static List<Time> list = new ArrayList<>();
static int N;
static class Time {
int start;
int end;
public Time(int start, int end) {
this.start = start;
this.end = end;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
list.add(new Time(start, end));
}
compare_sort();
greedy();
} // End of main
static void compare_sort() {
Collections.sort(list, new Comparator<Time>() {
@Override
public int compare(Main.Time o1, Main.Time o2) {
if(o1.end == o2.end) {
return o1.start - o2.start;
}
return o1.end - o2.end;
}
});
}
static void greedy() {
int count = 0;
int prev_end_time = 0;
for(int i=0; i<N; i++) {
Time time = list.get(i);
if(prev_end_time <= time.start) {
prev_end_time = time.end;
count++;
}
}
System.out.println(count);
} // End of greedy
} // End of class
Reference
この問題について([Java]白俊1931号[会議室手配]Java), 我々は、より多くの情報をここで見つけました https://velog.io/@lifeisbeautiful/Java-백준-1931번-회의실-배정-자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol