[백준] - 게임

JIWOO YUN·2023년 9월 25일
0

문제링크

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

구현방법

기본 이분탐색 문제이다

min 은 0번부터 max 는 10억으로 잡고

이분탐색을 돌리면서 승률이 변하는 경우 그 값을 answer로 갱신해주면서 max = mid -1로 값을 변하는 문제였다.

알고리즘

이분탐색

CODE

import java.util.*;
import java.io.*;


public class Main {

    private static final int MAX_VALUE = 1000000000;

    private static int curRate;
    public static void main(String[] args) throws IOException {
        BufferedReader br= new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st =new StringTokenizer(br.readLine());
        int X = Integer.parseInt(st.nextToken());
        int Y = Integer.parseInt(st.nextToken());

        int answer = -1;
        //둘이 같으면 변할수없음.
        if(X==Y){
            System.out.println(answer);
            return;
        }

        //현재 승률 계산
        curRate = (int)((long)100*Y/X);


        int max = MAX_VALUE;
        int min = 0;

        while(min <= max)
        {
            int mid = (max+min)/2;
            //만약 승률이 변하는 경우
            if(isChangeWinRate(X,Y,mid)){
                answer = mid;
                max = mid-1;
            }
            //승률이 변하지 않는 경우
            else{
                min = mid +1;
            }
        }

        System.out.println(answer);
    }

    //승률이 변하는 지 체크
    private static boolean isChangeWinRate(int x, int y, int mid) {
        int nxt_x = x + mid;
        int nxt_y = y + mid;

        int nxt_Rate = (int)((long)100 * nxt_y/nxt_x);

        //승률이 높아지면 변한거임.
        if(curRate < nxt_Rate){
            return true;
        }

        return false;
    }
}
profile
열심히하자

0개의 댓글