[10025번] 게으른 백곰 ( 슬윈, 배열 구간 핵 주의 )

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

코테 문제들

목록 보기
47/113


✅ 구간

N(1 ≤ N ≤ 100000)개의 얼음 양동이들이 xi(0 ≤ xi ≤ 1,000,000)좌표마다 놓여 있고 1 ≤ K ≤ 2,000,000 이므로 슬윈을 할 때 k의 최대를 조건을 걸어주어야 한다.
구간이 (2*k)-1이면 4,000,000인데 좌표는 1,000,000이 최대이기 때문이다!!
구현은 쉽지만 테스트 케이스에서 거르지 못해서 간과했다.
테스트 케이스가 다 통과인데, 배열 인덱스 오류가 난다면 입력값을 의심해보자.


✅ 코드

4Byte * 1,000,000 = 4,000,000Byte = 4,000 KB = 4MB이다.
메모리 용량이 충분하기 때문에 40000001칸 배열을 만들어서 얼음 양을 저장해도 된다!
그리고 이 문제는 정.말. 배열의 범위에 정신 똑바로 차리고 풀어야 한다.
x는 0부터 시작이고 n은 또 1부터 시작임 -,-

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	static int[] bear;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());

		int ice, bucket = 0;

		bear = new int[4000001];

		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(br.readLine());
			ice = Integer.parseInt(st.nextToken());
			bucket = Integer.parseInt(st.nextToken());
			bear[bucket] = ice;
		}

		long sum = 0, result = 0;

		for (int i = 0; i < (k * 2) + 1; i++) {
			sum += bear[i];
		}

		result = Math.max(sum, result);

		for (int i = (k * 2) + 1; i < bear.length; i++) {
			int j = i - ((k * 2) + 1);
			sum -= bear[j];
			sum += bear[i];
			result = Math.max(sum, result);
		}

		System.out.println(result);

	}
}

다른 문제보다 더 많이 틀렸다.
배열의 구간을 확실하게 생각하고 한 번에 코드를 짜는 습관.. 필요해;..

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

0개의 댓글