[BOJ] 17245번 서버실(이진탐색)

호호빵·2022년 6월 4일
0

Algorithm

목록 보기
2/46

17245번 서버실 (이진탐색)

문제를 풀다가 내 방식을 도대체 코딩해야할 지 몰라서 검색을 했고 우리팀 벨로그가 나왔다!

나의 롤모델

설명을 잘 해주셔서 이해는 되었지만 이진탐색에 대해 따로 공부를 해야할 것 같다.

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는 시간보다는 메모리를 줄이는데에 사용된 것 같다.

앞으로는 필요할 때에 적절한 코드를 작성하여 불필요한 메모리와 시간 낭비를 줄여야 할 것 같다. 
profile
하루에 한 개념씩

0개의 댓글