계산기 수식
문제
박물관에 오래된 계산기 한 대가 전시되어 있다. 이 계산기에는 1부터 N까지의 숫자 키가 왼쪽에서 오른쪽으로 한 줄로 붙어 있고, 키의 자리를 바꿀 수는 없다. 계산기를 쓰려면 왼쪽 끝의 1부터 오른쪽 끝의 N까지 숫자 키를 차례대로 모두 한 번씩 눌러야 한다.
숫자 키 사이사이에는 연산 키를 하나 넣을 수 있다. 넣을 수 있는 것은 다음의 세 가지다.
1) 더하기 키를 넣는다. 양쪽의 수를 더한다. 2) 빼기 키를 넣는다. 왼쪽의 수에서 오른쪽의 수를 뺀다. 3) 아무 연산 키도 넣지 않는다. 이 경우 양쪽의 숫자가 하나의 수로 이어 붙는다. 예를 들어 2와 3 사이에 아무것도 넣지 않으면 23이라는 하나의 수가 된다.
숫자 키가 N개이므로 연산 키를 넣을 자리는 N-1개다. 계산기는 이어 붙이기를 먼저 처리한 뒤에, 남은 더하기와 빼기를 왼쪽에서 오른쪽으로 차례대로 처리한다.
이렇게 만들 수 있는 식 가운데 계산 결과가 0이 되는 모든 식을 찾는 프로그램을 작성하여라.
예를 들어 N=7이라고 해보자. 연산 키를 넣을 자리는 6개이며, 계산 결과가 0이 되는 식은 다음의 표와 같이 모두 6가지다. 표에서 빈칸은 그 자리에 아무 연산 키도 넣지 않았다는 뜻이다.
| 식 | 1과 2 | 2와 3 | 3과 4 | 4와 5 | 5와 6 | 6과 7 |
|---|---|---|---|---|---|---|
| 1+2-3+4-5-6+7 | + | - | + | - | - | + |
| 1+2-3-4+5+6-7 | + | - | - | + | + | - |
| 1-2 3+4+5+6+7 | - | + | + | + | + | |
| 1-2 3-4 5+6 7 | - | - | + | |||
| 1-2+3+4-5+6-7 | - | + | + | - | + | - |
| 1-2-3-4-5+6+7 | - | - | - | - | + | + |
표의 세 번째 식을 읽어 보자. 2와 3 사이에 아무 키도 넣지 않았으므로 두 숫자는 23이라는 하나의 수가 된다. 따라서 이 식의 값은 1-23+4+5+6+7이며, 계산하면 0이 된다. 네 번째 식도 같은 방식으로 1-23-45+67이 되어 값이 0이 된다.
계산기 앞에는 N의 값을 적은 안내판이 여러 장 놓여 있다. 안내판마다 따로 답을 찾아서 출력한다.
입출력 예시
예시 1
입력
1 7
출력
1+2-3+4-5-6+7 1+2-3-4+5+6-7 1-2 3+4+5+6+7 1-2 3-4 5+6 7 1-2+3+4-5+6-7 1-2-3-4-5+6+7
예시 2
입력
1 5
출력
1 2-3-4-5
예시 3
입력
2 3 7
출력
1+2-3 1+2-3+4-5-6+7 1+2-3-4+5+6-7 1-2 3+4+5+6+7 1-2 3-4 5+6 7 1-2+3+4-5+6-7 1-2-3-4-5+6+7
입력 조건
가장 먼저 계산기 앞에 놓인 안내판의 수 T가 자연수로 주어진다. T는 1 이상 7 이하의 자연수다.
이어서 T개의 줄에 걸쳐 각 안내판에 적힌 N이 한 줄에 하나씩 주어진다. N은 3 이상 9 이하의 자연수이며, N이 숫자 키의 개수이므로 연산 키를 넣을 자리는 N-1개가 된다. 안내판마다 적힌 N의 값은 서로 같을 수도 있다.
출력 조건
각 안내판에 대하여, 계산 결과가 0이 되는 모든 식을 한 줄에 하나씩 출력한다. 식은 숫자와 연산 기호를 왼쪽부터 차례대로 이어 적되, 아무 연산 키도 넣지 않은 자리에는 공백 한 칸을 적는다. 그래서 2와 3을 이어 붙인 자리는 23이 아니라 2 3으로 적힌다.
식을 출력하는 순서는 왼쪽 자리부터 차례대로 비교하여 정한다. 한 자리에서는 아무 연산 키도 넣지 않은 것이 가장 앞에 오고, 그 다음이 더하기 키, 그 다음이 빼기 키다.
한 안내판의 식을 모두 출력한 뒤에는 빈 줄을 하나 출력한다. 마지막 안내판 뒤에도 빈 줄을 하나 출력한다. 줄 끝에 남는 공백은 없다.
요구사항
- 숫자 키의 자리는 바꿀 수 없고 1부터 N까지 차례대로 모두 누릅니다
- 연산 키를 넣을 자리는 N-1개이며, 각 자리에 더하기, 빼기, 혹은 아무것도 넣지 않습니다
- 아무 키도 넣지 않은 자리에서는 양쪽 숫자가 하나의 수로 이어 붙습니다
- 식을 적을 때 이어 붙인 자리에는 공백 한 칸을 적습니다
- 한 안내판의 식을 모두 출력한 뒤에 빈 줄을 하나 출력하며, 마지막 안내판 뒤에도 빈 줄이 붙습니다
- 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
- 케이스는 15개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 15개를 전부 통과해야 해결입니다.
예시
공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 15개를 전부 통과해야 해결입니다.
2 3 7
1+2-3 1+2-3+4-5-6+7 1+2-3-4+5+6-7 1-2 3+4+5+6+7 1-2 3-4 5+6 7 1-2+3+4-5+6-7 1-2-3-4-5+6+7
1 5
1 2-3-4-5
1 7
1+2-3+4-5-6+7 1+2-3-4+5+6-7 1-2 3+4+5+6+7 1-2 3-4 5+6 7 1-2+3+4-5+6-7 1-2-3-4-5+6+7
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.