https://www.acmicpc.net/problem/14717
시간 1초, 메모리 256MB
input :
output :
조건 :
오랜 시간이였다..... 대학교 1학년때 봤던 문제로. 그때도 막혀서 지금까지 질질 끌고 왔는데 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 생각보다 별 거 없었다.. 역시 예전의 나
일단 문제에서 입력을 받은 카드들은 우리가 뽑을 수 없다.
그래서 data 배열에서 이 값들을 빼주고, 남은 것들을 temp 배열에 넣어 모든 가능한 경우를 따지려 한다.
data = [2] * 11
data[0] = 0
data[a] -= 1
data[b] -= 1
그냥 18C2 이기 때문에 itertool을 써도 될 것 같다.
그리고 본인이 이기는 경우를 따져야 하기 때문에.
1. 땡 일 경우.
조건을 몇 번 빠뜨린 경우가 많다...
그리고 소수점 3째자리까지 출력이니까.
print("{:.3f}".format(ans / all))
참고
즉 format(3.141592, ".2f"))의 형식으로 소수점 두 자리까지 출력할 수 있습니다.
한편 "{:.1f}".format() 형태로도 사용할 수 있습니다.
import sys
a, b = map(int, sys.stdin.readline().split())
data = [2] * 11
data[0] = 0
data[a] -= 1
data[b] -= 1
temp = []
for idx, item in enumerate(data):
for i in range(item):
temp.append(idx)
ans = 0
all = 0
for i in range(len(temp)):
for j in range(i + 1, len(temp)):
all += 1
opposite_1, opposite_2 = temp[i], temp[j]
if a == b:
if opposite_1 != opposite_2:
ans += 1
else:
if a > opposite_2:
ans += 1
else:
if opposite_1 == opposite_2:
continue
my_num = a + b % 10
opposite = opposite_1 + opposite_2 % 10
if my_num > opposite:
ans += 1
print("{:.3f}".format(ans / all))