DSLR
면접 대비시간 제한6초메모리 제한256 MB
레지스터 값 A를 목표값 B로 바꾸는 가장 짧은 DSLR 명령 문자열을 사전 순으로 가장 앞선 것으로 출력합니다.
문제
네 개의 명령어 , , , 을 사용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있으며, 레지스터에는 이상 미만의 십진수를 저장할 수 있다. 각 명령어는 레지스터에 저장된 수 을 아래와 같이 바꾼다. 의 네 자리 숫자를 각각 라 하자. 즉 이다.
- D: 을 두 배로 만든다. 결과가 보다 크면 으로 나눈 나머지를 취한다. 즉 을 레지스터에 저장한다.
- S: 에서 을 뺀 을 저장한다. 단, 이 이면 를 저장한다.
- L: 의 네 자리 숫자를 왼쪽으로 한 칸 회전시킨 결과를 저장한다. 연산 후 네 자리 숫자는 왼쪽부터 이 된다.
- R: 의 네 자리 숫자를 오른쪽으로 한 칸 회전시킨 결과를 저장한다. 연산 후 네 자리 숫자는 왼쪽부터 이 된다.
과 은 항상 네 자리 십진수를 기준으로 회전한다. 예를 들어 이면 을 적용한 결과는 , 을 적용한 결과는 이다.
서로 다른 두 정수 와 () 가 주어질 때, 를 로 바꾸는 가장 짧은 명령어 문자열을 구하는 프로그램을 작성한다. 예를 들어 , 이면 다음 두 방법으로 각각 두 번의 명령어만에 바꿀 수 있다.
- 을 두 번:
- 을 두 번:
이 경우 길이가 가장 짧은 명령어 문자열은 LL 과 RR 두 가지이며, 사전순으로 더 앞서는 LL 을 출력해야 한다.
자릿수에 이 포함될 때를 주의한다. 예를 들어 에 을 적용하면 이 되어 결과는 이고, 을 적용하면 이 되어 결과는 이다.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다. 이어지는 개의 줄에 각 테스트 케이스가 주어지며, 각 줄에는 두 정수 와 가 공백으로 구분되어 주어진다. 는 레지스터의 초기 값, 는 목표 값이며, 둘 다 이상 미만이고 이다.
출력
각 테스트 케이스마다 를 로 바꾸는 데 필요한 가장 짧은 명령어 문자열을 한 줄에 하나씩 출력한다. 길이가 최소인 명령어 문자열이 여러 개라면, 그중 사전순으로 가장 앞서는 것을 출력한다. 명령어 문자는 알파벳 순서, 즉 로 비교한다.