티스토리 뷰
1) 생각
올림픽 종목을 추가하기 위한 투표를 한다. 올림픽 종목과 투표위원회가 각각 주어진다.
올림픽 종목은 재미있는 순서대로 나열되어있고 숫자는 해당 index 올림픽의 개최 비용을 나타낸다.
투표위원회의 주어지는 각각의 숫자는 그 개최비용 이하에 투표한다. 이 때, 가장 재미있는 종목에 투표한다.
처음 생각
각각을 배열로 저장한 뒤 투표위원회에서 하나를 꺼내어 올림픽 종목과 앞에서 부터 비교를 한다.
▶올림픽 종목은 재미순으로 정렬되어 있기 때문에 앞에서부터 비교를 하면서 해당 투표위원회의 비용 이하의 종목이 나오면 결과 배열의 해당 종목의 인덱스를 +1 시켜준 뒤 바로 반복문을 종료한다.
2) 방안
1) 모든 케이스에 대해서 가장 많은 표를 획득한 경기는 1경기만 존재한다.
▶ 조건 문을 처리해 줄 때, =을 사용하지 않아도된다.
▶ 위에서 만들어둔 결과 배열의 인덱스를 탐색하여 가장 수가 높은 해당 인덱스를 +1 하여 출력한다(배열의 Index는 0부터 시작)
▶ 조직위원회가 담겨있는 B 배열은 굳이 배열에 저장할 필요없이 바로 사용해도 무방할 것이다.(이 편이 속도가 더 빠를 것이다)
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Solution{ static int n,m; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int tc = Integer.parseInt(br.readLine()); StringBuilder sb = new StringBuilder(); for(int i=1;i<=tc;i++) { StringTokenizer st = new StringTokenizer(br.readLine()); n = Integer.parseInt(st.nextToken()); // 종목 리스트 m = Integer.parseInt(st.nextToken()); // 조직 위원회 int[] A = new int[n]; int[] B = new int[m]; st = new StringTokenizer(br.readLine()); for(int j=0;j<n;j++) A[j] = Integer.parseInt(st.nextToken()); st = new StringTokenizer(br.readLine()); for(int j=0;j<m;j++) B[j] = Integer.parseInt(st.nextToken()); // 입력 받기 끝 // 해당 종목이 선택된 횟수를 저장할 배열 int[] resultArr = new int[n]; // B를 앞에서 부터 꺼내고 그 B를 가지고 A의 앞에서부터 작거나 같은게 있나 파악. 발견하면 해당 횟수를 올려주고 반복문 종료후 다음 B 탐색. for(int j=0;j<m;j++) { int t = B[j]; for(int k=0;k<n;k++) { if(A[k]<=t) { resultArr[k]++; break; } } } int t = 0; int result = 0; // 가장 많이 투표를 받은 종목의 번호를 출력해야 하므로 앞에서 부터 resultArr에 저장된 가장 큰 값을 찾는다. // 가장 큰 값을 저장해야할 t 변수와 그 떄의 종목의 번호(index)를 가지고 있을 result 변수 생성. // 배열은 0부터 시작하고 번호는 1 부터 시작하므로 index+1 을 해주었다. for(int j=0;j<n;j++) { if(t<resultArr[j]) { t = resultArr[j]; result = j+1; } } sb.append("#"+i+" "+result+"\n"); } System.out.println(sb); } } | cs |
'알고리즘 > SW Expert' 카테고리의 다른 글
[SW Expert] 1226. [S/W 문제해결 기본] 7일차 - 미로1 (0) | 2018.08.29 |
---|---|
[SW Expert] 2817. 부분 수열의 합 (0) | 2018.08.28 |
[SW Expert] 2819. 격자판의 숫자 이어 붙이기 (0) | 2018.08.27 |
[SW Expert] 4522. 세상의 모든 팰린드롬 (0) | 2018.08.23 |
[SW Expert] 4579. 세상의 모든 팰린드롬 2 (0) | 2018.08.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday