1. 문제
https://www.acmicpc.net/problem/1404
1404번: 토너먼트 승자
첫째 줄에 수 28개가 주어진다. 처음 7개의 수는 0번 참가자가 1번 참가자와 싸워서 이길 수 있는 확률부터 7번 참가자와 싸워서 이길 수 있는 확률이다. 다음 6개의 수는 1번 참가자와 2번 참가자
www.acmicpc.net
2. 풀이
import sys
input = sys.stdin.readline
# w_r_l : 승리 확률 리스트
w_r_l = [[] for i in range(8)]
w_r = list(map(int, input().split()))
j = -1
j_l = [0, 7, 13, 18, 22, 25, 27]
for i, v in enumerate(w_r):
# print("i :", i, ", v :", v)
if i in j_l:
j += 1
w_r_l[j].append(0)
w_r_l[j].append(v / 100)
w_r_l[len(w_r_l[j]) - 1].append((100 - v) / 100)
j += 1
w_r_l[j].append(0)
# for i in w_r_l:
# print(i)
# o_w : 각 선수가 1라운드에서 이길 확률
o_w = []
for i in range(8):
if i % 2 == 0:
op = i + 1
else:
op = i - 1
o_w.append(w_r_l[i][op])
# print("-----------------one_w-------------------")
# print(o_w)
# t_w : 각 선수가 2라운드에서 이길 확률
t_w = []
for i in range(8):
tp = i % 4
if tp == 0:
op_l = [i + 2, i + 3]
elif tp == 1:
op_l = [i + 1, i + 2]
elif tp == 2:
op_l = [i - 2, i - 1]
elif tp == 3:
op_l = [i - 3, i - 2]
to_w_r = 0
# if i == 7:
# print("op_l :", op_l)
for j in op_l:
# if i == 7:
# print(i + 1, "이 1라운드에서 이길 확률", o_w[i])
# print(j + 1, "이 1라운드에서 이길 확률", o_w[j])
# print(i + 1, "이", j + 1, "한테 이길 확률", w_r_l[i][j])
to_w_r += o_w[i] * o_w[j] * w_r_l[i][j]
t_w.append(to_w_r)
# print("-----------two_w--------")
# print(t_w)
# thir_w : 각 선수가 3라운드에서 이길 확률
thir_w = []
for i in range(8):
if i < 4:
op_l = [4, 5, 6, 7]
else:
op_l = [0, 1, 2, 3]
to_w_r = 0
for j in op_l:
to_w_r += t_w[i] * t_w[j] * w_r_l[i][j]
# if i == 2:
# print("i :", i, "j :", j)
# print(to_w_r)
thir_w.append(to_w_r)
# print("----------third_w-------")
# print(thir_w)
for i in thir_w:
print(format(i,'.18f'), end=" ")
3. 후기
- 항상 이런 구현에 관련된 문제를 해결하고 나면 드는 생각이 있다.
'더 간결하고 좋은 프로세스를 가지도록 구현할 수 없을까? '라는 생각이다.
아직까지는 스스로 개발한 코드에 만족하지는 못하지만 계속해서 공부하여 먼훗날 스스로 만족할 만한 코드를 개발할 수 있도록 노력해야겠다.
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 삼각형 만들기(1448) (0) | 2023.02.13 |
---|---|
(Python)백준 코딩테스트 연습 - 시리얼 번호(1431) (0) | 2023.02.10 |
(Python)백준 코딩테스트 연습 - 미로 만들기(1347) (1) | 2023.02.05 |
(Python)백준 코딩테스트 연습 - 팰린드롬 만들기(1213) (0) | 2023.02.01 |
(Python)백준 코딩테스트 연습 - 약속(1183) (0) | 2023.01.31 |