개발/코테 TIL

[99클럽 코테 스터디 TIL#1일차] 백준 1072

서해쭈꾸미 2024. 10. 29. 10:34
문제

https://www.acmicpc.net/problem/1072

 

 

문제 풀기

 

1. 알고리즘 사용

  1) 이분 탐색

 count를 하나씩 증가시키면서 값을 찾으면 시간 초과, 필요 이상으로 많은 반복 발생한다. 따라서 이 문제에 이분 탐색을 활용하면 최소, 최대 값을 찾을 때 시간 복잡도를 줄일 수 있다. 가능한 범위를 설정하고 이분 탐색으로 좁혀가면서 계산했다.

 

  2) 이분 탐색 검색 공간 설정

 

 

2. 다항식 사용

  1) 확률

 현재 승률(z) = ((y + a) * 100) / (x + a)로 계산할 때, (여기서 x는 총 경기 수, y는 승리 횟수) 승률을 99%에서 100%로 올리려면 y / x 비율을 아주 미세하게 증가시켜야한다. 이 말은 추가로 몇 번을 더 이겨도 승률이 100%로 쉽게 올라가지 않는다는 것이다.

 

  2) 다항식

 승률이 변하는 최소값을 구하면 되니 아래의 다항식을 풀면 된다.

 

  현재 승률(z) + 1 = ((y + a) * 100) / (x + a)

 

 

 

작성한 코드
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int y = sc.nextInt();
        
        int percent = (int)((long)y * 100 / x);
        
        if(percent >= 99) {
            System.out.println(-1);
            return;
        }
        
        int left = 1;
        int right = x;
        int result = 0;
        
        while(left <= right) {
            int mid = (left + right) / 2;
            int newPercent = (int)((long)(y + mid) * 100 / (x + mid));
            
            if(newPercent > percent) {
                result = mid;
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
       
        System.out.println(result);
    }
}