[1026번] 보물 ( 탐욕법, 리스트에서 값 삭제하기 )

알쓸코딩·2023년 12월 3일
0

코테 문제들

목록 보기
34/113


✅ 리스트에서 remove 연산

리스트에서 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);
	}
}

profile
알면 쓸데있는 코딩 모음!

0개의 댓글