리스트에서 remove연산
a.remove(1); // 1번째 인덱스를 삭제
System.out.println(a);
b.remove(Integer.valueOf(1)); //인덱스를 뒤져서 값이 1인 애 삭제
System.out.println(b);
코드에서 min,max 를 찾는 과정을 아래처럼 더 간략하게 짤 수도 있다.
for(int i = 0; i<n; i++) {
int min = Collections.min(a);
int max = Collections.max(b);
result += (min * max);
a.remove(Integer.valueOf(min));
b.remove(Integer.valueOf(max));
}
이 부분을 조심하자.
a.remove(Integer.valueOf(max));
그리고 min과 max를 구할 때, 반복문을 쓴다면 이중 반복문으로 찾아야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
List<Integer> a = new ArrayList<>();
List<Integer> b = new ArrayList<>();
StringTokenizer st1 = new StringTokenizer(br.readLine());
StringTokenizer st2 = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
a.add(Integer.parseInt(st1.nextToken()));
b.add(Integer.parseInt(st2.nextToken()));
}
int result = 0;
for (int i = 0; i < n; i++) {
int max = 0;
int min = 1000;
// 오류: max와 min은 반복문 내에서 초기화되어야 함
for (int j = 0; j < a.size(); j++) {
if (a.get(j) >= max) {
max = a.get(j);
}
}
for (int j = 0; j < b.size(); j++) {
if (b.get(j) <= min) {
min = b.get(j);
}
}
result += (max * min);
// 오류: max와 min을 제거할 때 반드시 현재 리스트에서 찾아서 제거해야 함
a.remove(Integer.valueOf(max));
b.remove(Integer.valueOf(min));
}
System.out.println(result);
}
}