로그인가입

계산기 수식

300점케이스 15출제 dongbinna
10월 30일에 올라온 문제입니다.

문제

박물관에 오래된 계산기 한 대가 전시되어 있다. 이 계산기에는 1부터 N까지의 숫자 키가 왼쪽에서 오른쪽으로 한 줄로 붙어 있고, 키의 자리를 바꿀 수는 없다. 계산기를 쓰려면 왼쪽 끝의 1부터 오른쪽 끝의 N까지 숫자 키를 차례대로 모두 한 번씩 눌러야 한다.

숫자 키 사이사이에는 연산 키를 하나 넣을 수 있다. 넣을 수 있는 것은 다음의 세 가지다.

1) 더하기 키를 넣는다. 양쪽의 수를 더한다. 2) 빼기 키를 넣는다. 왼쪽의 수에서 오른쪽의 수를 뺀다. 3) 아무 연산 키도 넣지 않는다. 이 경우 양쪽의 숫자가 하나의 수로 이어 붙는다. 예를 들어 2와 3 사이에 아무것도 넣지 않으면 23이라는 하나의 수가 된다.

숫자 키가 N개이므로 연산 키를 넣을 자리는 N-1개다. 계산기는 이어 붙이기를 먼저 처리한 뒤에, 남은 더하기와 빼기를 왼쪽에서 오른쪽으로 차례대로 처리한다.

이렇게 만들 수 있는 식 가운데 계산 결과가 0이 되는 모든 식을 찾는 프로그램을 작성하여라.

예를 들어 N=7이라고 해보자. 연산 키를 넣을 자리는 6개이며, 계산 결과가 0이 되는 식은 다음의 표와 같이 모두 6가지다. 표에서 빈칸은 그 자리에 아무 연산 키도 넣지 않았다는 뜻이다.

식1과 22와 33과 44와 55와 66과 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

풀이

코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.

0자1줄메모리 256MB (적어만 둡니다)기준 60ms

제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.

공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.

이 문제를 푼 사람

아직 없습니다. 첫 번째가 되실 수 있습니다.