개의 캐릭터를 좋아하는 순서로 나열하였다. 각 캐릭터는 장비를 하나씩 가지고 있다.
번째 캐릭터의 장비를 업그레이드하는 데 만큼의 돈이 비용으로 든다. 또한, 번째 캐릭터의 장비를 다운그레이드할 수도 있는데, 이때는 만큼의 돈을 돌려받는다. 물론, 업그레이드 또는 다운그레이드가 불가능할 수도 있다.
캐릭터의 장비를 각각 업그레이드하거나, 유지하거나, 다운그레이드하려 한다.
그리고 그 결과를 길이가 인 문자열로 나타낼 것이다.
번째 캐릭터의 장비를 업그레이드했다면 문자열의 번째 문자가 +, 유지했다면 0,
다운그레이드했다면 -가 된다.
최종적으로 들어간 돈이 없도록 하면서,
좋아하는 캐릭터일수록 더 좋은 장비를 얻도록 하고 싶다.
따라서, 문자들의 사전순 순서를 +, 0, -로 고려했을 때,
사전순으로 가장 먼저 오는 결과 문자열을 구하는 프로그램을 작성하라.
입력 형식
첫 줄에 캐릭터의 수를 나타내는 정수 이 주어진다. ()
그다음 줄에 개의 정수 가 공백으로 구분되어 주어진다. 단, 가 인 경우 장비를 업그레이드할 수 없음을 의미한다. ()
그다음 줄에 개의 정수 가 공백으로 구분되어 주어진다. 단, 가 인 경우 장비를 다운그레이드할 수 없음을 의미한다. ()
출력 형식
첫 줄에 문제의 정답이 되는 길이가 인 결과 문자열을 출력한다.
예제 1
입력
4 2 -1 6 1 9 6 -1 0
출력
+-0+
예제 2
입력
3 2 4 1 5 3 1
출력
+-+
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 33점
종류 2: 28점
종류 3: 39점
추가적인 제한 조건이 없음.
해설
처음에 모든 장비를 다운그레이드해서 의 합만큼의 돈을 돌려받은 뒤, 각 캐릭터의 장비를 두 단계로 업그레이드하는 상황으로 바꿔 생각할 수 있다. 즉, 첫 번째 업그레이드의 비용은 고, 두 번째 업그레이드의 비용은 이다.
사전순으로 가장 먼저 오는 결과를 구하는 것이기 때문에 첫 번째 캐릭터부터 시작하여 순서대로 탐욕적으로 가능할 때까지 업그레이드해주면 답을 구할 수 있다. 다운그레이드를 못 하거나, 업그레이드를 못 하는 상황은 어렵지 않게 해결할 수 있다.
전체 시간복잡도는 이다.