[Gold III] 풍선 터트리기 - 32377
성능 요약
메모리: 108384 KB, 시간: 92 ms
분류
이분 탐색, 매개 변수 탐색
제출 일자
2026년 3월 7일 22:05:20
문제 설명
A, B, C 3명이 $N$개의 풍선을 터트리는 게임을 합니다.
- A는 $x$분마다 하나의 풍선을 터트립니다. (A는 게임 시작 후 $x, 2x, 3x$...분에 풍선을 터트립니다.)
- B는 $y$분마다 하나의 풍선을 터트립니다. (B는 게임 시작 후 $y, 2y, 3y$...분에 풍선을 터트립니다.)
- C는 $z$분마다 하나의 풍선을 터트립니다. (C는 게임 시작 후 $z, 2z, 3z$...분에 풍선을 터트립니다.)
- 동시에 두 명 이상이 풍선을 터트리는 경우 A, B, C순으로 풍선을 터트립니다.
마지막 풍선을 터트리는 사람이 승리한다고 했을 때 A, B, C 중 승자를 출력해주세요.
입력
첫 번째 줄에 풍선의 개수 $N$과, 풍선을 터트리는 데 걸리는 시간 $x, y, z$가 주어집니다. ($1 ≤ N, x, y, z ≤ 10^9$, $N, x, y, z$는 모두 정수입니다.)
출력
게임의 승자를 출력해주세요. A가 승자일 경우 A win을, B가 승자일 경우 B win을, C가 승자일 경우 C win을 출력해주세요.
💡 해결 방법
💻 코드
# https://www.acmicpc.net/problem/32377
import bisect
n, x, y, z = map(int, input().split())
time = 0
# print(help(bisect))
left = 1
right = (n * (min(x, y, z)))
# print(left, right)
ans_time = 0
while left <= right:
mid = (left + right) // 2
m = mid // x + mid // y + mid // z
if n <= m:
ans_time = mid
right = mid -1
else:
left = mid + 1
pre_time = ans_time - 1
cnt = (pre_time // x) + (pre_time // y) + (pre_time // z)
if ans_time % x == 0:
cnt += 1
if n == cnt:
print("A win")
quit()
if ans_time % y == 0:
cnt += 1
if n == cnt:
print("B win")
quit()
if ans_time % z == 0:
cnt += 1
if n == cnt:
print("C win")
quit()