Algorithm/백준

[백준 알고리즘] 1072번: 게임 (Python)

에릭 Kim 2023. 6. 6. 17:03
반응형

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

 

1072번: 게임

김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시

www.acmicpc.net

 

소스코드

 

 

풀이

★ 문제를 봤을 때 승률(z)이 변하는 최소 게임 수를 구하라고 했는데, 승률이 오르는 경우 뿐만 아니라 내리는 경우도 있지 않나 싶어서 조금 헤맸던 거 같습니다.

 

★ 승률 k를 구하는 과정에서 소수점 이하를 내림 처리 해주는 math 모듈의 trunc 함수를 사용하였습니다. 처음엔 k = m.trunc((y/x)*100)으로 승률을 구했는데 정답 처리가 계속 오답으로 떠서 구글링을 좀 해봤습니다. 보니까 파이썬의 부동소수점 오차로 인한 문제라고 합니다. 그래서 k = (y*100)//x로 승률을 구해줬습니다 ! 

 

★ 승률이 될 수 있는 범위는 1부터 x까지입니다. 승률이 99이상이 되면 승률이 상승할 수 있는 값이 없기 때문에 -1이 출력되고, 아닐 시 이분탐색을 실시합니다. ( y값의 범위는 1 <= y <= x 이기 때문에 z가 99가 되었을 때 범위 안에서 z를 바꿀 수 없음)

 

★ 이렇게 구한 게임수를 y와 x에 더하여 승률을 구해주고, 구한 승률인 t가 k보다 크면 ans를 mid로 바꾼 뒤 rt를 mid-1 해줍니다. 반대의 경우엔 lt를 mid+1 해줍니다 ! 

반응형