상수를 위한 언어
면접 대비시간 제한1초메모리 제한128 MB
0이 아닌 정수 C마다 C+1 또는 C-1로 시작해 INCR과 DBL만으로 C를 만드는 가장 짧은 프로그램을 출력하고, 길이가 같으면 DBL을 T, INCR을 2T로 두어 실행 시간이 가장 짧은 것을 고른다.
문제
한 컴퓨터공학 교수가 YACL("Yet Another Constant Language")이라는 새로운 프로그래밍 언어를 개발하고 있다. 이 언어는 매우 단순해서 다음 네 개의 명령어만 가진다.
- C+1 — 상수 을 만든다.
- C-1 — 상수 을 만든다.
- INCR — 현재 만들고 있는 상수에 을 더한다.
- DBL — 현재 만들고 있는 상수에 를 곱한다.
프로그램은 이 명령어들을 한 줄에 하나씩 나열한 것이며, 위에서 아래로 순서대로 실행된다. 프로그램을 작고 빠르게 유지하기 위해 다음 규칙을 지켜야 한다.
- 모든 프로그램은 반드시 C+1 또는 C-1로 시작해야 한다.
- 주어진 상수 는 가능한 한 적은 수의 명령어로 만들어야 한다.
- 같은 (최소) 명령어 수로 를 만드는 프로그램이 여러 개라면, 그중 가장 빠른 것을 사용해야 한다. 실행 시간은 DBL이 나노초, INCR이 나노초 걸린다고 가정한다.
주어지는 각 상수에 대해, 위의 모든 규칙을 만족하면서 그 상수를 만드는 프로그램을 출력하여라.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 만들어야 할 이 아닌 정수 상수 하나가 적힌 한 줄이며, 을 만족한다. 정수 하나만 있는 줄은 입력의 끝을 나타내며 처리하지 않는다.
출력
각 테스트 케이스마다 먼저 Constant n 한 줄을 출력한다. 여기서 n은 해당 상수이다. 그다음 그 상수를 만드는 가장 효율적인 프로그램을 한 줄에 명령어 하나씩 출력한다. 연속한 두 테스트 케이스 사이에는 빈 줄을 하나 출력한다.