nosorae   3년 전

메모리가 어디서 128MB씩 쓰여서 메모리초과가 뜨는지 잘 모르겠습니다.

메모리 비중이 큰 게 배열이 다일텐데 말이죠. 

다른 이유가 있을까요??

아래는 제출 코드입니다.

import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringTokenizer st = new StringTokenizer(sc.nextLine());
int n = Integer.parseInt(st.nextToken());
long m = Long.parseLong(st.nextToken());


int arr[] = new int[n];
for(int i= 0; i < n; i++) {
arr[i]= Integer.parseInt(sc.nextLine());
}

//arrays.sort(arr);
long min = 20000000000L;
for(int i = 0; i < n; i++) {
if(min > arr[i])
min = arr[i];
}
long start = min;
long end = min*m;
long mid = (start+end)/2;
long ans = 0L;
long sum = 0L;
int i = 0;


while(true) {
mid = (start+end)/2;
i = 0;
//System.out.println(mid +" // " +start+" : "+end);
sum = 0;
for(; i < n; i++) {
sum+= mid/arr[i];

//System.out.print(sum+" ");
if(sum >= m)
break;
}
//System.out.println();
if(sum >= m) {
end = mid - 1;
ans = mid;
}
else {
start = mid + 1;
}


if(start > end) {
break;
}
}


System.out.println(ans);

}
}

nosorae   3년 전

for(int i= 0; i < n; i++) {
arr[i]= Integer.parseInt(sc.nextLine());
}

여기서 

arr[i]= sc.nextInt();

로 바꾸면 해결이되네요! 이때까지 문제된 적이 없어서 저런식으로 숫자 받았는데 그러면 안된다는 걸 알게되었습니다.

아마 String으로 받아서 메모리차지를 많이 해서 메모리초과가 난 것 같은데 맞을까요?

댓글을 작성하려면 로그인해야 합니다.