yous   2년 전

제목: 괄호

연산자와 피연산자의 대응 관계는 괄호를 통해 명확히 할 수 있다. 예를 들어, C 프로그램에서 a-b-c 표현식은 뺄셈 연산자가 좌측 결합(left associative) 연산자이므로 (a-b)-c로 명확히 할 수 있다.

연산자의 기본 우선순위와 결합 방향을 무시하기 위해 괄호를 사용할 수 있다. 예를 들어, a-(b-c) 표현식에서 괄호를 통해 뺄셈 연산자의 결합 방향이 무시되었다.

초보 C 프로그래머 강민은 연산자 우선순위와 결합 방향을 외우는 것에 스트레스를 심하게 받았다. 그래서 그는 새 언어 ICPC(I can parenthesize C)를 만들었다. 이 언어는 연산자와 피연산자의 모든 대응 관계를 괄호를 사용해서 표기해야 한다. 이 점을 제외하면 다른 기능은 C와 동일하다. 예를 들어, a-b-c 대신 (a-b)-c라고 적어야 하고, a+b*c 대신 a+(b*c)라고 적어야 한다.

하지만 어떤 경우에는 괄호를 너무 많이 사용하게 된다. a-b-c 표현식은 다음과 같이 쓰면 충분하다.

(a-b)-c

하지만 다음과 같이 쓸 수도 있고,

(a-(b))-c

다음과 같이 쓸 수도 있다.

((a-b)-c)

밑줄이 있는 괄호 쌍은 불필요하게 많은 것이다.

강민은 C 표현식을 ICPC 표현식으로 변환하되, 괄호 쌍이 필요한 개수만큼만 있도록 하고 싶다. 이제 강민을 도와주도록 하자. 단순함을 위해 입력으로 주어지는 C 표현식에는 다섯 종류의 이항 연산자(+, -, *, /, %), 괄호((, ))만 사용된다고 가정하자. 모든 피연산자는 한 글자짜리 소문자 알파벳이다. C 표현식이 주어졌을 때, 그게 ICPC 표현식인지 구별하는 프로그램을 작성하자.

표현식이 ICPC에서 오류(error)가 아니라면, C에서도 오류가 아니어야 한다. 일단 C에서 오류가 아닌 경우, 표현식이 ICPC에 적합(proper)한 것인지 구별하기 위해 괄호가 어떻게 사용되었는지 확인해야 한다. 표현식에서 괄호가 제대로 사용되지 않았다면(예: 괄호가 필요한 개수만큼만 있지 않음) 부적합(improper)한 것으로 간주한다.

입력으로 주어지는 C 표현식은 처음부터 오류인 경우도 있다는 점에 주의하자. 예를 들어, a%/b%/ 사이에 피연산자가 하나 더 있어야 유효하기 때문에 오류다. 다른 예로, a b + cab 사이에 연산자가 하나 더 필요하기 때문에 오류다.

입력

표준 입력을 통해 C 표현식 한 줄이 주어진다. 표현식은 소문자 알파벳, 괄호와 다섯 종류의 이항 연산자(+, -, *, /, %)를 포함한 특수 문자, 공백으로 이루어진 문자열이다. 입력은 적어도 하나의 연산자를 포함한다. 입력의 길이는 공백과 마지막 개행 문자를 포함해 1000을 넘지 않는다.

출력

표준 출력을 통해 다음 단어 중 하나를 포함한 한 줄을 출력한다. error, proper, improper. 입력으로 주어지는 C 표현식이 오류인 경우에 error를 출력한다. 오류가 아닌 경우, 표현식이 괄호를 어떻게 사용했느냐에 따라 proper 또는 improper를 출력한다. ICPC를 위해 필요한 정확한 수의 괄호를 사용했다면 proper를 출력하고, 그렇지 않으면 improper를 출력한다.

yous   2년 전

원문의 이미지 코드입니다. 첫 줄의 <p> 맨 앞에 들어가 있습니다.

<img alt="" src="https://upload.acmicpc.net/8745a8d8-2614-45cb-ab1c-65217431582d/-/preview/" style="width: 280px; height: 70px; float: right; margin-left:10px;" />

댓글을 작성하려면 로그인해야 합니다.