고등학교 물리 선생님들은 흔히 순수한 계산 문제보다 글로 서술된 문제가 더 어렵다고 생각한다. 학생이 문제를 먼저 읽고 이해해야 하기 때문이다.
그래서 선생님들은 "U=10V, I=5A, P=?"처럼 문제를 내지 않고 다음과 같이 서술한다. "전압이 U=10V인 전지와 전구로 이루어진 전기 회로가 있다. 전구에는 I=5A의 전류가 흐른다. 전구에서 발생하는 전력은 얼마인가?"
하지만 절반의 학생들은 애초에 지문을 제대로 읽지 않는다. 그들은 그저 주어진 값만 뽑아낸다: U=10V, I=5A. 그리고 이렇게 생각한다. "내가 아는 공식이 뭐지? 아 그래, $P = U \cdot I$. 따라서 $P = 10,\text{V} \cdot 5,\text{A} = 500,\text{W}$. 끝."
물론 이 방법이 항상 통하지는 않으므로 이런 학생들이 물리 시험에서 최고 점수를 받지는 못한다. 그래도 이 단순한 알고리즘은 대개 과목을 통과하기에는 충분하다.
오늘은 컴퓨터가 고등학교 물리 시험을 통과할 수 있는지 확인해 본다. 먼저 P-U-I 유형 문제, 즉 전력·전압·전류 중 두 값이 주어지고 나머지 한 값을 구하는 문제에 집중한다.
위의 단순한 알고리즘에 따라 이런 서술형 문제를 읽고 푸는 프로그램을 작성하라.
첫 번째 줄에는 테스트 케이스의 개수가 주어진다.
각 테스트 케이스는 정확히 두 개의 데이터 필드와 임의의 다른 단어들로 이루어진 한 줄이다. 데이터 필드는 I=xA, U=xV, P=xW 형태이며, 여기서 x는 실수이다. 단위(A, V, W) 바로 앞에는 접두사 m(밀리, $10^{-3}$), k(킬로, $10^{3}$), M(메가, $10^{6}$) 중 하나가 붙을 수 있다. 정리하면 데이터 필드는 다음 문법을 따른다.
DataField ::= Concept '=' RealNumber [Prefix] Unit
Concept ::= 'P' | 'U' | 'I'
Prefix ::= 'm' | 'k' | 'M'
Unit ::= 'W' | 'V' | 'A'
추가 보장 사항:
각 테스트 케이스마다 두 줄을 출력한다.
연속한 테스트 케이스 사이에는 빈 줄을 하나 넣어 구분한다.