본문 바로가기
CNU 학습 동아리/2020 동계 학습 동아리

2020 동계 학습 동아리_7회차_2020-02-17(월)

by 매화of사군자 2020. 2. 18.

목표

> 카카오 코드 페스티벌 2018 본선 문제 풀어보기

> 원래 6시간인데 학습 동아리가 3시간이므로 A,B,C문제만 풀어보기

 

A번 승부예측

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

 

15997번: 승부 예측

첫 번째 줄에 조별리그를 진행할 국가명 네 개가 공백으로 구분되어 주어진다. 주어지는 모든 국가명은 알파벳 대문자로만 구성된 길이가 1 이상 10 이하인 문자열이다. 두 번째 줄부터 일곱 번째 줄까지는 A B W D L 순으로 주어지는데, 전문가들의 예측에 따르면 A와 B가 경기를 진행했을 때 A가 승리할 확률은 W, 비길 확률은 D, 질 확률은 L이라는 의미이다. A, B는 각각 첫 번째 줄에 있는 국가명 중 하나이고, A와 B가 같은 경우는 주어지지

www.acmicpc.net

해결 방법

> 6번 동안의 경기를 바탕으로 나라 * 승률을 연산하여 저장한다.

> 위의 정보를 바탕으로 경우의 수를 계산하여 동점인 경우를 해결한다.

 

결과

> 틀렸습니다.

 

내가 생각한 틀린 이유

> 승률이 똑같은 경우(A와 B 두 나라라고 가정)에 A가 이겼을 경우가 쭉 이어져 6경기가 끝났을 경우와 B가 이겼을 경우 6경기가 끝났을 경우를 따로 계산해야 할 것 같다.

 

코드(틀린 케이스)

더보기

country = input().split()

 

check = dict()

for i in country:

    check[i] = 0

 

for i in range(6):

    a,b,w,d,l = input().split()

    w,d,l = float(w), float(d), float(l)

    check[a] = check[a] + w * 3 + d * 1

    check[b] = check[b] + (1 - (w + d)) * 3 + d * 1

 

check_list = list(check.values())

final = list()

count = 0

for i in check_list:

    final.append([count, i])

    count += 1

final.sort(keylambda x : -x[1])

 

f_list = [0,0,0,0]

flag = max(check_list)

if check_list.count(flag) == 1:

    f_list[final[0][0]] =  1/1

    check_list.remove(flag)

    flag = max(check_list)

    if check_list.count(flag) == 1:

        f_list[final[1][0]] =  1/1

    elif check_list.count(flag) == 2:

        f_list[final[1][0]] =  1/2

        f_list[final[2][0]] =  1/2

    elif check_list.count(flag) == 3:

        f_list[final[1][0]] =  1/3

        f_list[final[2][0]] =  1/3

        f_list[final[3][0]] =  1/3

elif check_list.count(flag) == 2:

    f_list[final[0][0]] =  2/2

    f_list[final[1][0]] =  2/2

elif check_list.count(flag) == 3:

    f_list[final[0][0]] = 2/3

    f_list[final[1][0]] = 2/3

    f_list[final[2][0]] = 2/3

else:

    f_list[final[0][0]] = 2/4

    f_list[final[1][0]] = 2/4

    f_list[final[2][0]] = 2/4

    f_list[final[3][0]] = 2/4

 

for i in f_list:

    print(i)

A번도 풀지 못해서 B와 C는 문제를 보지도 못했다.

 

소감

> 솔직히 말해서 A번은 그냥 쉽게 풀 수 있다고 생각했는데 못풀어서 놀랐다.

댓글