저항기

면접 대비

시간 제한1초메모리 제한128 MB

요약
저항의 직렬 및 병렬 연결을 나타내는 중첩 표현식을 해석해 전체 저항을 기약분수로 출력한다.
난이도

보통10점 중 6점

유형
문자열, 스택, 재귀, 수학
정답자
아직 제출이 없습니다

문제

모든 전기 기기(예: 전구)는 일정한 저항을 가진다. 기기를 주어진 전압에 연결하면, 저항이 클수록 기기에 흐르는 전류는 작아진다. 저항의 측정 단위는 옴(ohm)이다. 부동소수점 수에서 생기는 반올림 오차를 피하기 위해, 각 기기의 저항은 유리수(양의 정수의 비)로 나타낸다.

두 개 이상의 기기를 하나의 구성(configuration)으로 연결하는 기본 방법은 두 가지이다: 직렬 연결(그림 1) 또는 병렬 연결(그림 2).

두 개 이상의 구성을 다시 직렬 또는 병렬로 연결하여 더 복잡한 구성을 만들 수 있으며, 기존 구성으로부터 더 복잡한 구성을 만드는 이 과정은 몇 번이든 반복할 수 있다(그림 3).

일반적으로 하나의 구성은 단일 기기이거나, 두 개 이상 구성의 직렬 연결이거나, 두 개 이상 구성의 병렬 연결이다.

저항 구성의 전체 저항은 다음 두 규칙으로 계산한다.

  1. 직렬 구성의 저항은 각 구성 요소 저항의 합이다.
  2. 병렬 구성의 저항은 각 구성 요소 저항의 역수를 모두 더한 값의 역수이다.

그림 1에서 구성의 저항은 3/2+3/4+1/4=5/23/2 + 3/4 + 1/4 = 5/2 옴이다.

그림 2에서 구성의 저항은 1/(1/(3/2)+1/(1/2)+1/(1/4))=3/201/(1/(3/2) + 1/(1/2) + 1/(1/4)) = 3/20 옴이다.

그림 3에서는 먼저 1/(1/(1/2)+1/(2/3))+2/5=24/351/(1/(1/2) + 1/(2/3)) + 2/5 = 24/35 와 1/2+1/(1/(2/3)+1/(2/5))+3/2=9/41/2 + 1/(1/(2/3) + 1/(2/5)) + 3/2 = 9/4 를 계산한다. 이 두 값의 역수를 더한 뒤 그 결과의 역수를 취하면 72/13772/137 옴을 얻는다.

구성은 텍스트 형식으로 표현할 수 있다.

  • 단일 기기는 그 저항 값으로 표현한다(괄호로 감싸지 않는다).
  • 여러 구성의 직렬 연결은 각 구성 요소의 표현을 앰퍼샌드 문자("&")로 구분하고 괄호 한 쌍으로 감싸서 표현한다.
  • 여러 구성의 병렬 연결은 각 구성 요소의 표현을 세로 막대 문자("|")로 구분하고 괄호 한 쌍으로 감싸서 표현한다.

따라서 그림 1, 2, 3은 각각 다음 식으로 표현된다:

(3/2 & 3/4 & 1/4)
(3/2 | 1/2 | 1/4)
(((1/2 | 2/3) & 2/5) | (1/2 & (2/3 | 2/5) & 3/2))

입력

입력은 여러 개의 테스트 케이스로 이루어지며, 한 줄에 하나의 테스트 케이스가 주어진다. 각 줄에는 위 규칙에 따라 구성을 정의하는 유효한 식이 하나 들어 있다. 각 기기의 저항 값은 분자/분모 형태의 양의 유리수이다. 모든 앰퍼샌드(&)와 세로 막대(|)의 양쪽에는 공백이 하나씩 있으며, 그 외의 공백은 식에 존재하지 않는다.

출력

각 테스트 케이스에 대해, 구성의 저항을 분자와 분모의 모든 공약수를 약분한 분자/분모 형태로 한 줄에 출력한다. 공백은 출력하지 않는다.

예제1

  1. 예제 1

    입력
    15/1
    (3/2 & 3/4 & 1/4)
    (3/2 | 1/2 | 1/4)
    ((1/2 | 2/3) & 2/5)
    (1/2 & (2/3 | 2/5) & 3/2)
    (((1/2 | 2/3) & 2/5) | (1/2 & (2/3 | 2/5) & 3/2))
    
    예상 출력
    15/1
    5/2
    3/20
    24/35
    9/4
    72/137