[백준] 1072 게임

차누·2024년 4월 3일
0

문제

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

문제 접근방식

1.게임 횟수 : X와 이긴 게임 : Y를 입력
2.X와 Y의 형택이의 승률을 구한다 (Z)
3.기존의 Z 승률에서 최소 몇 판을 해야 Z가 변하는지 구한다(이분탐색 접근)

코드 해설

승률 구하기

//게임한 횟수
		long x = sc.nextLong();
		
		//이긴 게임
		long y = sc.nextLong();
		
		//승률 구하기
		long z = (y * 100) / x;

Y는 %이기 때문에 * 100을 해줘야 한다

승률이 99% 이상일 경우 승률이 변하지 않기 때문에
종료

if(z >= 99) {
			
			System.out.println("-1");
		}

이분탐색 시작
Mid값 구하기

long mid = (start + end) / 2;

Mid값을 구했으면 Mid값의 변할때마다 승률을 구한다

long result = 100 *(y + mid) / (x + mid);

result값이 Z의 승률이 같아질 때까지 반복을 해준다

result가 Z보다 더 클 경우 end를 줄여주고

if(result > z) {
					
					end = mid-1;
				}

작을 경우 start를 +1 해준다

else {
					start = mid + 1;
				}
  • 여기서 else if를 안해주고 else를 한 이유는
    "최소"의 판 수를 구해야 하기 때문에 같은 승률이라도
    계속 비교를 해줘야 하기 때문이다.

마지막으로 result와 z가 같을때 최소 판수를 출력

System.out.println(end);
profile
to be good programmer

0개의 댓글