시간 제한
메모리 제한
시간 제한
1초
메모리 제한
128 MB
화학은 결국 반응에 관한 것이다. 시험관에 여러 물질을 넣고 가열한 뒤(폭발하거나 중독되지 않기를 바라면서) 다시 식히고, 얻은 것이 예상한 것과 같은지 확인한다. 그 부분은 쉽고 재미있지만, 정작 어려운 것은 그 모든 과정을 기록하는 일이다. 이런 종류의 기술이 대개 그렇듯, 전 세계의 화학 교사들은 반복 훈련에 의존한다. 학생들이 완성해야 하는, 끝없어 보이는 반응식의 모음이다. 핵심은 왼쪽(반응물, 즉 '입력')에 나타나는 모든 것이 오른쪽(생성물, 즉 '출력')에도 나타나야 한다는 것이다. 간단해 보이지만, 수많은 화학 학생들이 그렇지 않음을 보여 주었다.
플럼비우스 교수는 학생들의 학습지에 같은 지적을 반복해서 적는 데 지쳐 이 과정을 자동화하고 싶어 한다. 학생들이 쓴 반응식을 입력하면 컴퓨터가 지적을 자동으로 만들어 주어, 새로운 반응식을 고안할 시간을 벌고 싶은 것이다. 바로 여기서 당신이 필요하다.
화학 반응식을 읽어 그것이 균형을 이루는지 판정하는 프로그램을 작성하라. 균형이 맞지 않으면, 어떤 원소가 얼마나 어긋났는지 알려 주어야 한다.
보통 화학 반응식은 다음과 같이 쓴다.
2H2O + SO2 ←→ H2 + H2SO4
그러나 컴퓨터 입력의 한계 때문에 다음과 같이 표기한다.
2H2O + SO2 = H2 + H2SO4
이 예는 반응식의 기본 요소를 보여 준다. 각 변은 하나 이상의 분자로 이루어지며, 분자는 '+' 기호로 구분된다(공백은 있어도 되고 없어도 된다). 각 분자 앞에는 그 분자가 반응에 몇 개 참여하는지를 나타내는 계수가 붙을 수 있다. 하나의 분자는 하나 이상의 원소로 이루어진다. 각 원소에는 기호가 있으며, 기호는 대문자 한 글자(예: 'H')이거나 대문자 뒤에 소문자 한 글자가 오는 형태(예: 'Br')이다. 기호 뒤에는 그 부분에 해당 원소의 원자가 몇 개 있는지를 나타내는 숫자가 올 수 있다. 따라서 위 식의 첫 항은, 원자 H 두 개와 원자 O 한 개로 이루어진 분자가 두 개 있다는 뜻이다(이것은 물이지만, 알 필요는 없다).
이 반응식들은 학생들에게 나눠 준 연습 문제이므로 왼쪽 변은 정의상 옳다. 따라서 당신이 할 일은, 왼쪽에 나타난 모든 원자가 오른쪽에도 나타나는지 판정하는 것이다. 그렇다면 반응식은 균형을 이룬다. 그렇지 않다면 어떤 원소가 생성되거나 사라졌는지, 그 양은 얼마인지 보고해야 한다.
입력은 여러 개의 반응식으로 이루어지며, 각 반응식은 한 줄에 하나씩 주어진다. 각 줄은 250자를 넘지 않는다. 각 반응식은 반응물의 집합과 생성물의 집합을 '=' 기호로 구분하여 나타낸다. 각 집합은 하나 이상의 분자로 이루어지며, 계수가 붙을 수 있고 '+' 기호로 구분된다. '+'와 '=' 기호의 양옆에는 0개 이상의 공백이 있을 수 있다.
입력의 마지막 줄은 '#' 한 글자만 있는 줄이다. 이 줄은 처리하지 않는다.
입력의 각 반응식마다 적어도 한 줄의 출력이 있다. 반응식이 균형을 이루면 그 줄은 'Equation n is balanced.'이며, 여기서 n은 반응식 번호이다(1부터 시작). 균형을 이루지 않으면 출력 줄은 'Equation n is unbalanced.'이고, 그 뒤에 다음 형식의 줄들이 이어진다.
You have <created or destroyed> m <atom or atoms> of element.
여기서 element는 해당 원소의 기호, m은 그 원소의 남거나 부족한 원자의 개수이며, 'atom(s)'는 상황에 맞게 단수 또는 복수로 쓴다. 균형을 이루지 않는 각 반응식에 대해 이 줄들은 원소 기호의 알파벳 순으로 정렬되며, 끝에 빈 줄이 하나 온다. (따라서 출력의 마지막 줄이 빈 줄이 될 수도 있다.)