1. 문제
https://www.acmicpc.net/problem/1072
1072번: 게임
김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시
www.acmicpc.net
2. 풀이
import sys
input = sys.stdin.readline
def bin_sear(x, y, z, l_p, h_p):
#print('x :', x, 'y :', y, 'z :', z, 'l_p :', l_p, 'h_p :', h_p)
if abs(l_p - h_p) == 1:
#print(h_p)
return h_p
m_p = (l_p + h_p) // 2
new_z = (100 * (y + m_p)) // (x + m_p)
#print('new_z :', new_z)
if new_z > z:
return bin_sear(x, y, z, l_p, m_p)
elif new_z <= z:
return bin_sear(x, y, z, m_p, h_p)
# x : 게임 수, y : 이긴 횟수
x, y = map(int, input().split())
# z : 현재 승률
z = (100 * y) // x
if x == y or z == 99:
cnt = -1
else:
cnt = bin_sear(x, y, z, 0, x)
print(cnt)
3. 후기
- 위 문제는 이분 탐색을 이용하여 해결하는 문제이다.
처음 문제를 보고 이정도의 양이라면 굳이 이분 탐색을 사용하지 않아도 되지 않을까란 안일한 생각으로 도전해봤다.
하지만 역시나 시간 초과...
바로 이분 탐색을 코딩하여 도전하였음에도 '틀렸습니다'가 떠버렸다.
그 이유는 코딩 프로세스의 문제가 아닌 당연하게 사용하던 자료형의 문제였다.
float 자료형에서 int로 변환하는 과정에서 자료의 의도치않은 수치 변환이 생기면서 틀리게된 것이였다.
정수 혹은 실수 자료형을 사용하게 되는 상황에서 수가 크다면 유의해야할 부분이겠다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 약속(1183) (0) | 2023.01.31 |
---|---|
(Python)백준 코딩테스트 연습 - 선물(1166) (0) | 2023.01.28 |
(Python)백준 코딩테스트 연습 - 어린 왕자(1004) (0) | 2023.01.24 |
(Python)백준 코딩테스트 연습 - 피보나치 함수(1003) (0) | 2023.01.23 |
(Python)백준 코딩테스트 연습 - 터렛(1002) (0) | 2023.01.22 |