본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 11070 피타고라스 기댓값 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 8. 27.
728x90
반응형

BaekJoon 백준 11070 피타고라스 기댓값 문제는 전체 야구 경기에 대한 정보인 n개의 팀의 득점과 실점 기록이 주어지면, 이 기록으로부터 팀 별 피타고라스 기댓값을 계산한 후, 그중 최대 기댓값과 최소 기댓값을 출력하는 문제이다. 난이도는 Bronze 1이다.

 

BaekJoon 11070 피타고라스 기댓값 문제 정보

출처

- https://www.acmicpc.net/problem/11070

알고리즘 분류

- 시뮬레이션, 수학, 구현

난이도

- 브론즈 1 / Bronze 1

 

피타고라스 기댓값 문제 요약

  • 피타고라스 기댓값은 특정 야구팀이 한 시즌 동안 얼마나 잘했는지를 평가하는 지표 중 하나로 사용된다. 한 야구팀의 피타고라스 기댓값 W는 아래 식과 같이 정의된다.
    • W = S² / ( S² + A² )
  • 여기서 S는 해당 팀의 총 득점 수를, A는 해당 팀의 총 실점 수를 나타낸다.
  • n개의 팀에 대한 기록이 주어지면, 이 기록으로부터 팀 별 피타고라스 기댓값을 계산한 후, 그중 최대 기댓값과 최소 기댓값을 구하여 출력한다.
  • 피타고라스 기댓값에 1,000을 곱한 값의 정수 부분을 출력한다.
  • 첫 줄에는 두 양의 정수 n (2 ≤ n ≤ 1,000)과 m (2 ≤ m ≤ 1,000)이 주어진다. 여기서, n은 팀 개수이며, m은 전체 경기 수이다.
  • 하나의 경기는 네 개의 정수 a, b, p, q로 주어지는데, 팀 a와 팀 b가 경기를 했고, 팀 a는 p득점을 팀 b는 q득점을 했다는 의미이다. 여기서, 1 ≤ a  b  n이며, p q는 모두 음이 아닌 20 이하의 정수이다.
  • 하나의 테스트 데이터에서 팀 당 경기수가 반드시 같을 필요는 없다. 만약, 어떤 팀의 총 득점과 총실점이 모두 0이라면, 그 팀의 기댓값은 0으로 정의한다.

 

문제 풀이 과정

  1. 경기의 정보를 입력받는다.
  2. 팀별로 득점과 실점을 나눠서 저장한다.
  3. 팀별 기댓값을 구한다.
  4. 모든 팀 중에서 최대의 기댓값과 최소의 기댓값에 1000을 곱하여 출력한다.

 

코드 및 설명
for _ in range(int(input())):
    n, m = map(int, input().split())  # 팀 개수, 전체 경기 수
    gameScore = [[0, 0] for _ in range(n)]  # 팀 별 득점, 실점
    W = []  # 팀 별 기댓값
    for _ in range(m):
        a, b, p, q = map(int, input().split())
        gameScore[a - 1][0] += p  # a의 득점
        gameScore[a - 1][1] += q  # a의 실점
        gameScore[b - 1][0] += q  # b의 득점
        gameScore[b - 1][1] += p  # b의 실점

    # 팀 별 기댓값 구하기
    for i in range(n):
        if gameScore[i][0] == 0 and gameScore[i][1] == 0:
            W.append(0)
        else:
            W.append(1000 * gameScore[i][0] ** 2 / (gameScore[i][0] ** 2 + gameScore[i][1] ** 2))

    print(int(max(W)))
    print(int(min(W)))

BaekJoon 백준 11070 피타고라스 기댓값 문제를 파이썬 python으로 풀어보았다. 난이도는 Bronze 브론즈 1이다. 

728x90
반응형

댓글