금요일부터 가장 고생한 문제. 너무 고생해서 답을 찾기도 했고, 그만큼 주의할 점도 많아서 복기할 겸 기록하려고 한다.
package Algoritm.day5;
import java.io.*;
import java.util.StringTokenizer;
public class no17245 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[][] serverRoom = new int[N][N];
long all_count = 0;
int max = 0;
int min = 0;
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
serverRoom[i][j] = Integer.parseInt(st.nextToken());
all_count += serverRoom[i][j];
if (max < serverRoom[i][j]) {
max = serverRoom[i][j];
}
}
}
int mid = 0;
while (min + 1 < max) {
mid = (min + max) / 2;
long cnt = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (serverRoom[i][j] > mid) {
cnt += mid;
} else {
cnt += serverRoom[i][j];
}
}
}
if (((double) cnt / all_count) >= 0.5) {
max = mid;
} else {
min = mid;
}
}
System.out.println(max);
}
}
while (min + 1 < max)
자료형 때문에 숫한 난장판을 겪었다...ㅎㅎ 좋은..배움이었다...
cf) Int의 범위
2-31 ~ (231-1) / -2,147,483,648 ~ 2,147,483,647
저도 이거 풀다가 여기에까지 왔네요 하하... 전 다르게 풀려고 했는데 그 풀이법도 모르겠고... 깔끔하게 풀어주셔서 참고할게요! 감사합니다~~(퍼가요~♡)