Jun's Development Journey
[BOJ] 15728번 에리-카드 본문
문제
15728번: 에리 - 카드
첫째 줄에 N, K(0 ≤ K < N ≤ 100)가 주어지고 둘째 줄에는 N개의 ‘공유 숫자카드’에 적혀 있는 정수, 셋째 줄에는 N개의 ‘팀 숫자카드’에 적혀 있는 정수가 주어진다. 이 수는 -10,000보다 크거나
www.acmicpc.net
풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class BOJ_15728 {
static int N,K;
static ArrayList<Integer> share, team;
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
share = new ArrayList<>();
team = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for(int i=0;i<N;i++)
share.add(Integer.parseInt(st.nextToken()));
st = new StringTokenizer(br.readLine());
for(int i=0;i<N;i++)
team.add(Integer.parseInt(st.nextToken()));
// //음수 * 음수 고를 경우 가장 큰 경우가 나올 수 있음(정렬 후 그리디 방식은 안됨!)
// Arrays.sort(share);
// Arrays.sort(team);
// System.out.println(share[N-1]*team[N-K-1]);
//최선의 방법 K장 골라 빼기
int max = 0, idx = -1;
for(int i=0;i<K;i++){
max = Integer.MIN_VALUE;
idx = -1;
for(int j=0;j<N;j++){
for(int k=0;k<team.size();k++){
if(max < share.get(j)*team.get(k)){
max = share.get(j) * team.get(k);
idx = k;
}
}
}
team.remove(idx);
}
//max 값 찾기
max = share.get(0)*team.get(0);
for(int i=1;i<N;i++){
for(int j=0;j<team.size();j++){
max = share.get(i)*team.get(j)>max ? share.get(i)*team.get(j):max;
}
}
System.out.println(max);
}
}
처음에는 공동 배열과 팀 배열을 정렬하여 팀 배열에서는 큰 2개 값을 제외시키고, 공동 배열의 가장 큰 값과 팀 배열의 나머지 중 가장 큰 값의 곱으로 해결하려 했지만, 음수 X 음수 의 경우가 최대값이 나올 수 있다는 점을 간과했었다.
괜히 브루트포스 문제가 아니었던 것 같다. 결국 모든 경우의 수를 다 완전 탐색하여 풀이했다.
'BOJ > BruteForce' 카테고리의 다른 글
[BOJ] 2992번 크면서 작은 수 (0) | 2021.04.21 |
---|---|
[BOJ] 1062번 가르침 (0) | 2021.04.16 |
[BOJ] 2798번 블랙잭 (0) | 2021.03.10 |
[BOJ] 1107 리모컨 (0) | 2021.02.19 |
[BOJ] 1182번 부분수열의 합 (0) | 2019.07.30 |