본문 바로가기
Problem Solving/Baekjoon

[백준] 2428 표절 - BinarySearch / Java

by graycode 2023. 6. 18.

 문제 링크

 

2428번: 표절

첫째 줄에 제출한 솔루션의 개수 N이 주어진다. 둘째 줄에는 각 솔루션 파일의 크기 size(F1), size(F2), ..., size(FN)이 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ size(Fi) ≤ 100,000,000) 솔루션 파일의 크기는 정수이

www.acmicpc.net

 

 풀이 과정

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

    static int[] arr;

    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());
        arr = new int[n];

        StringTokenizer st = new StringTokenizer(br.readLine());
        while (n-- > 0)
            arr[n] = Integer.parseInt(st.nextToken());

        Arrays.sort(arr);

        long sum = 0;
        for (int i = 1; i < arr.length; i++)
            sum += binarySearch(arr[i] * 0.9, i);

        bw.write(String.valueOf(sum));
        bw.flush();
    }

    private static long binarySearch(double size, int i) {
        int left = 0, right = i - 1;
        while (left <= right) {
            int mid = (left + right) / 2;

            if (arr[mid] < size) left = mid + 1;
            else right = mid - 1;
        }

        return i - left;
    }

}

댓글