문제
20XX년 도쿄에서 세계적인 스포츠 대회가 열린다. 프로그래밍 대회는 전세계적으로 인기있는 스포츠이고, 정식 종목으로 채택 될 가능성이 점점 높아지고 있다. 정식 종목으로 채택될 경기를 조직위원회에 문의해보니 다음과 같은 답변을 얻게 되었다.
- 조직위원회는 정식 종목으로 채택할 후보 종목 N개를 재미있는 순서대로 나열한 리스트를 만들었다. 위에서부터 i번째에 적혀있는 경기는 i번째로 재미있는 경기이다. 이 경기를 i라고 했을 때, 개최하는데 필요한 비용은 Ai이다.
- 조직위원회는 총 M명으로 구성되어 있고, 순서대로 1번 위원부터 M번 위원이다. 각각의 위원 j는 자신의 심사 기준 Bj를 가지고 있으며, 개최 비용이 Bj를 넘지 않는 경기 중 가장 재미있는 경기에 표를 던졌다.
- 각 위원의 투표 기준에 해당하는 경기는 반드시 존재한다.
- 가장 많은 표를 획득한 경기는 하나이다.
경기 목록과 위원의 정보가 주어졌을 때, 가장 많은 표를 획득한 경기의 번호를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 경기의 수 N과 위원의 수 M이 주어진다. (1 ≤ N, M ≤ 1000)
다음 N개의 줄에는 경기 i를 개최하는데 필요한 비용 Ai가 주어진다. (1 ≤ Ai ≤ 1000)
다음 M개의 줄에는 위원 j의 심사 기준 Bj가 주어진다. (1 ≤ Bj ≤ 1000)
출력
가장 많은 표를 획득한 경기의 번호를 출력한다.
풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st= new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); //경기수
int M = Integer.parseInt(st.nextToken()); //위원수
int [] match =new int [N];
int [] person =new int [M];
int [] result =new int[N];
int max=0; int cnt=0;
//리그 입력값 받기
for(int i=0;i<N;i++) {
match[i]=Integer.parseInt(br.readLine());
result[i]=0;
}
//위원 입력값 받기
for(int i=0;i<M;i++) {
person[i]=Integer.parseInt(br.readLine());
}
for(int i=0;i<M;i++) { //위원
out: for(int j=0;j<N;j++) { //리그점수
if(match[j]<=person[i]) {
result[j]++;
break out;
}
}
}
for(int i=0;i<result.length;i++) {
if(result[i]>max) {
max=result[i];
cnt=i+1;
}
}
System.out.println(cnt);
}
}
|
https://www.acmicpc.net/problem/10040
반응형