포럼
문제 KOI00061

괄호의 값 비교

설명

여는 괄호 (와 닫는 괄호 )를 이용해서 만들어지는 문자열 중에서 올바른 괄호열이란 다음과 같이 정의 된다.

  • 한 쌍의 괄호로만 이루어진 문자열 ()는 올바른 괄호열이다.
  • \(X\)가 올바른 괄호열이면, \(X\)를 괄호로 감싼 (\(X\))도 올바른 괄호열이다.
  • \(X\)\(Y\) 가 올바른 괄호열이면, \(X\)\(Y\) 를 이어 붙인 XY도 올바른 괄호열이다.
  • 모든 올바른 괄호열은 위 세 가지 규칙을 통해서만 만들어진다.

예를 들어 (()(()))(())()()는 올바른 괄호열이지만, (())((()()은 모두 올바른 괄호열이 아니다. 우리는 올바른 괄호열 \(X\)에 대하여 그 괄호열의 값(괄호값)을 아래와 같이 정의하고 \(f\)[\(X\)]로 표시한다.

  • \(f\)[()] = 1
  • \(X\)가 올바른 괄호열이면, \(f\)[(\(X\))] = \(2 \times f\)[\(X\)]
  • \(X\)\(Y\) 가 올바른 괄호열이면, \(f\)[XY] = \(f\)[\(X\)] + \(f\)[\(Y\) ]

예를 들어 몇 가지 올바른 괄호열들의 괄호값을 구해 보자.

  • \(f\)[()] = 1
  • \(f\)[(())] = \(2 \times f\)[()] = \(2 \times 1 = 2\)
  • \(f\)[()()] = \(f\)[()] + \(f\)[()] = 1 + \(1 = 2\)
  • \(f\)[()()()] = \(f\)[()] + \(f\)[()()] = 1 + \(2 = 3\)
  • \(f\)[(()())] = \(2 \times f\)[()()] = \(2 \times 2 = 4\)
  • \(f\)[((()))] = \(2 \times f\)[(())] = \(2 \times 2 = 4\)
  • \(f\)[()(())] = \(f\)[()] + \(f\)[(())] = 1 + \(2 = 3\)
  • \(f\)[(()())()(())] = \(f\)[(()())] + \(f\)[()(())] = 4 + \(3 = 7\)

두 개의 올바른 괄호열 \(A\)\(B\)를 읽고, 두 문자열의 괄호값 \(f\)[\(A\)]와 \(f\)[\(B\)]를 비교하는 프로그램을 작성하라. 즉, \(f\)[\(A\)] = \(f\)[\(B\)]인지, \(f\)[\(A\)] < \(f\)[\(B\)]인지, \(f\)[\(A\)] > \(f\)[\(B\)]인지를 판단하는 프로그램을 작성하라.

하나의 입력에서 \(T\)개의 테스트 케이스를 해결해야 한다.

제약
  • \(1 \le T \le 10\)
  • \(A\)\(B\)는 올바른 괄호열이다.
  • 하나의 입력에서 주어지는 모든 테스트 케이스의 \(A\)의 길이의 합은 \(3\,000\,000\) 이하이다.
  • 하나의 입력에서 주어지는 모든 테스트 케이스의 \(B\)의 길이의 합은 \(3\,000\,000\) 이하이다.
입력 형식

첫 번째 줄에 테스트 케이스의 개수 \(T\)가 주어진다.

이후 \(T\)개의 테스트 케이스가 차례로 주어진다. 각 테스트 케이스의 형식은 다음과 같다.

  • 첫 번째 줄에 \(A\)가 주어진다.
  • 두 번째 줄에 \(B\)가 주어진다.
출력 형식

각각의 테스트 케이스마다, 한 개의 줄에,

  • \(f\)[\(A\)] = \(f\)[\(B\)]이면 =,
  • \(f\)[\(A\)] < \(f\)[\(B\)]이면 <,
  • \(f\)[\(A\)] > \(f\)[\(B\)]이면 >

을 출력한다.

서브태스크
서브태스크점수설명

1

3점

\(A\)의 길이와 \(B\)의 길이는 각각 \(6\) 이하이다.

2

23점

\(A\)의 길이와 \(B\)의 길이는 각각 \(50\) 이하이다.

3

13점

여는 괄호와 닫는 괄호의 개수가 같고 모든 닫는 괄호가 모든 여는 괄호의 뒤에 있는 괄호열을 단순 괄호열이라고 하자. 예를 들어 (), (()), ((())), (((((()))))) 는 단순 괄호열이다. \(A\)\(B\)는 각각 길이가 서로 다른 단순 괄호열 한 개 이상을 이어 붙여 만든 괄호열이다. 예를 들어 ()(()), (((())))()((())) 와 같은 문자열이 주어질 수 있다. (())()(()) 는 단순 괄호열을 이어 붙여 만든 문자열이지만, 길이가 서로 같은 단순 괄호열 (()) 가 두 번 붙어 있기 때문에, 이 부분문제에서는 주어지지 않는다.

4

61점

추가 제약 조건 없음.

예제 1
입력
1
(())
()()
출력
=
예제 2
입력
1
()()()
(()())
출력
<
예제 3
입력
2
((()))
()(())
(((())))
()()()()()
출력
>
>
문제 정보

riseoj 작성

출처 올림피아드 > 한국정보올림피아드 > KOI 2021 > 2차 대회 > 초등부 3번

평가 및 의견

괄호의 값 비교

개요
출제자 난이도 Gold III 골드 III 의견 1 / 1
커뮤니티 난이도: Gold III 골드 III
티어 투표 분포
Gold III 골드 III 1

Log in to rate problems.

개별 의견

풀이 제출

괄호의 값 비교

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8