문제를 풀다가 내 방식을 도대체 코딩해야할 지 몰라서 검색을 했고 우리팀 벨로그가 나왔다!
설명을 잘 해주셔서 이해는 되었지만 이진탐색에 대해 따로 공부를 해야할 것 같다.
import java.io.*;
import java.util.StringTokenizer;
public class Prac {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// StringTokenizer
int N = Integer.parseInt(br.readLine());
int[][] arr = new int[N][N];
long total = 0;
int max = 0;
int min = 0;
int mid = 0;
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
total += arr[i][j];
if (max < arr[i][j]) {
max = arr[i][j];
}
}
}
while (min + 1 < max) {
mid = (min + max) / 2;
long cnt = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; i++) {
if (arr[i][j] > mid) {
cnt += mid;
} else {
cnt += arr[i][j];
}
}
}
if ((double) cnt / total >= 0.5) {
max = mid;
} else {
min = mid;
}
}
System.out.println(max);
}
}
// StringTokenizer 자리에 원래 코드를 작성했었는데
시간이 더 많이 소요되어 런타임 에러가 났다.
BufferedWirter는 시간보다는 메모리를 줄이는데에 사용된 것 같다.
앞으로는 필요할 때에 적절한 코드를 작성하여 불필요한 메모리와 시간 낭비를 줄여야 할 것 같다.