반응형
문제
https://www.acmicpc.net/problem/11387
문제 설명
- 크리와 파부는 좋은 무기를 장착해서 전투력을 높이려고 한다. 전투력의 공식은 아래에 있다.
- 크리와 파부가 본인의 무기를 장착했을 때 각 능력치 수치, 그리고 무기를 장착했을 때 증가하는 각 수치가 입력으로 주어진다.
- 이 때 서로의 무기를 바꿔 꼈을 때 전투력이 증가하는지, 감소하는지, 변화가 없는지 검사한다.

풀이
이 문제는 부동소수점 오차를 노려 오답을 유도하는 문제다.
부동소수점은 모든 실수를 정확하게 표현이 불가능하기 때문에 모든 수를 정수의 계산이 되도록 바꿔주어야 한다.
따라서 실수 계산이 포함된 모든 식에 동일한 수를 곱한 후 전투력을 계산했다.
- 현재 무기를 장착한 상태의 크리와 파부의 전투력을 계산한다.
- 상대의 무기를 장착한 후 크리와 파부의 전투력을 계산한다.
- 전 후의 전투력을 비교하여 증감 상태를 검사한다.
코드
import sys
input = sys.stdin.readline
cree = list(map(int,input().split()))
fabu = list(map(int,input().split()))
cree_w = list(map(int,input().split()))
fabu_w = list(map(int,input().split()))
def equip(p,w1,w2):
for i in range(5):
p[i]-=w1[i]
p[i]+=w2[i]
def cal_cp(p):
return p[0]*(100+p[1])*((10000-min(100*p[2],10000))+min(p[2],100)*p[3])*(100+p[4])
def print_res(prev,cur):
if prev < cur:
print('+')
elif prev == cur:
print('0')
else:
print('-')
prev_cree = cal_cp(cree)
equip(cree,cree_w,fabu_w)
cur_cree = cal_cp(cree)
print_res(prev_cree,cur_cree)
prev_fabu = cal_cp(fabu)
equip(fabu,fabu_w,cree_w)
cur_fabu = cal_cp(fabu)
print_res(prev_fabu,cur_fabu)
시간복잡도
- 단순 계산식으로 풀이 가능한 문제이다.
- 따라서 시간복잡도는 약 $O(1(상수))$로 볼 수 있다.
반응형
'알고리즘' 카테고리의 다른 글
| [파이썬/python] 백준 - 17287 The Deeper, The Better (1) | 2025.07.25 |
|---|---|
| [파이썬/python] 백준 - 2295 세 수의 합 (1) | 2025.07.24 |
| [파이썬/python] 백준 - 11562 백양로 브레이크 (0) | 2025.07.22 |
| [파이썬/python] 백준 - 18430 무기 공학 (0) | 2025.07.21 |
| [파이썬/python] 백준 - 14651 걷다보니 신천역 삼 (Large) (0) | 2025.07.20 |
