본문 바로가기
카테고리 없음

백준11131🐨Balancing Weights

by redcubes 2024. 10. 16.

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

무게 균형 맞추기

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 256 MB 5994 864 528 84.962%

문제

공부를 시작한 이후로, 당신의 가족들은 당신이 매우 어려운 질문들에 대한 답을 알고 있기를 기대해 왔습니다. "내 컴퓨터에 무슨 문제가 있는 거야?", "해리 왕자의 새 여자친구 이름이 뭐야?", "내 새 바지 봤어?" 이제 당신의 할아버지가 새로운 문제를 찾아냈고, 당신은 또다시 인생의 가장 근본적인 질문 중 하나에 대한 답을 찾아야 하는 압박감에 시달리고 있습니다.

당신은 20미터 길이의 지렛대가 정확히 중간에서 무게 없는 지지대로 균형을 잡고 있는 상황을 받았습니다. 여러 개의 무게추가 지렛대에 적용됩니다. 당신은 어느 쪽이 내려갈지, 혹은 내려가지 않을지 알아내야 합니다. 그런 뛰어난 두뇌를 가진 당신은 즉시 각 무게추가 지렛대에 가해지는 총 토크에 기여할 것이며, 이것이 답을 결정할 것임을 알아챕니다. 단일 무게추에 의한 토크는 다음 식으로 결정됩니다:

τ=m×d

여기서 τ는 가해진 총 토크, m은 무게추의 질량, d는 중심으로부터의 거리입니다. 그러면 지렛대의 각가속도는 다음 방정식으로 구할 수 있습니다:

α=τ/I

여기서 α는 각가속도이고 I는 지렛대의 관성 모멘트입니다. 관성 모멘트는 다음 함수로 주어집니다:

I=∫r²dm

여기서 r은 회전축까지의 수직 거리입니다.

입력

입력의 첫 줄에는 테스트 케이스의 수 T가 주어집니다. 각 테스트 케이스는 무게추의 수 N을 포함한 한 줄로 시작합니다. 그 다음 줄에는 N개의 숫자 W₁ W₂ ... Wₙ이 주어지며, 이는 N개 무게추의 위치를 나타냅니다.

  • 0 < T ≤ 100
  • 0 < N ≤ 100
  • −1000 ≤ Wi ≤ 1000
  • 음수 Wi는 무게추가 중심의 왼쪽에 위치함을 의미하고, 양수는 오른쪽에 위치함을 의미합니다.
  • 지렛대의 무게는 정확히 2000그램이며, 균일하게 분포되어 있습니다. 각 무게추는 100그램입니다.
  • 무게추는 단일 질점으로 모델링됩니다.

출력

각 테스트 케이스에 대해, 무게가 왼쪽으로 기울면 "Left", 오른쪽으로 기울면 "Right", 어느 쪽으로도 기울지 않으면 "Equilibrium"을 포함한 한 줄을 출력하세요.

예제 입력 1

3
3
-2 0 2
1
4
4
4 -2 0 -3

예제 출력 1

Equilibrium
Right
Left

고민하다가 그냥 상식적으로 짜니까 된다. 생각해보면 될 수 밖에 없음.

def s():
    r=iter(map(int,open(0).read().split()))
    def x():return next(r)
    for _ in range(x()):
        n=x()
        t=sum(x() for _ in range(n))
        print(("Equilibrium","Right","Left")[(t>>31)|(bool(t)&1)])
s()

이걸 진지하게 짜면 이렇게 된다.

def calculate_torque(weights):
    total_torque = 0
    for w in weights:
        total_torque += 100 * w  # Torque contribution for each weight (τ = m * d, m = 100 g)
    return total_torque

T = int(input())  # Number of test cases
for _ in range(T):
    N = int(input())  # Number of weights
    weights = list(map(int, input().split()))

    # Calculate torque contribution for each weight
    total_torque = calculate_torque(weights)
    
    # Find out which direction the lever tilts
    if total_torque < 0:
        print("Left")
    elif total_torque > 0:
        print("Right")
    else:
        print("Equilibrium")