만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

우주를 다시 구하기

면접 대비

시간 제한20초메모리 제한1024 MB

요약
C와 S로 이루어진 프로그램과 피해 한도 D가 주어질 때, 총 피해를 D 이하로 만드는 인접한 명령 교환의 최소 횟수를 구합니다.
난이도

보통10점 중 5점

유형
문자열, 그리디, 시뮬레이션
정답자
아직 제출이 없습니다

문제

외계 로봇이 모든 알고리즘 지식을 파괴하는 빔으로 우주를 위협하고 있습니다. 이 로봇을 막아야 합니다.

다행히 로봇의 동작 원리는 알려져 있습니다. 로봇은 세기가 1인 빔으로 시작하며, 명령어들로 이루어진 프로그램을 왼쪽에서 오른쪽 순서로 한 번에 하나씩 실행합니다. 각 명령어는 다음 두 종류 중 하나입니다.

  • C (charge): 빔의 세기를 두 배로 만듭니다.
  • S (shoot): 빔을 발사하여, 현재 빔의 세기만큼 피해를 줍니다.

예를 들어 프로그램이 SCCSSC이면 로봇은 다음과 같이 동작합니다.

  • 빔을 발사하여 1의 피해를 줍니다.
  • 빔을 충전하여 세기가 2가 됩니다.
  • 빔을 충전하여 세기가 4가 됩니다.
  • 빔을 발사하여 4의 피해를 줍니다.
  • 빔을 발사하여 4의 피해를 줍니다.
  • 빔을 충전하여 세기가 8이 됩니다.

이 경우 프로그램이 주는 총 피해는 9입니다.

우주 최고의 알고리즘 연구자들은 총 DD의 피해까지만 견딜 수 있는 방패를 개발했습니다. 하지만 로봇의 현재 프로그램은 실행 시 그보다 더 큰 피해를 줄 수 있습니다.

우주의 대통령은 로봇이 프로그램을 실행하기 전에 우주선을 타고 올라가 프로그램을 해킹하려 합니다. 로봇에게 들키지 않고 할 수 있는 해킹은 인접한 두 명령어를 서로 바꾸는 것뿐입니다. 예를 들어 위 프로그램의 3번째와 4번째 명령어를 바꾸면 SCSCSC가 되고 총 피해는 7로 줄어듭니다. 여기서 다시 해킹하여 SCSSCC로 만들면 피해는 5로 줄어듭니다.

대통령은 해킹 횟수를 많이 늘리고 싶지 않습니다. 프로그램의 총 피해를 DD 이하로 만드는 해킹 횟수의 최솟값을 구하세요. 그런 방법이 없다면 그 사실을 알려야 합니다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어집니다. 이어서 TT개의 줄이 주어지며, 각 줄에는 방패가 견딜 수 있는 최대 총 피해 DD와 로봇의 프로그램인 문자열 PP가 주어집니다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄을 출력합니다. 여기서 xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 필요한 해킹 횟수의 최솟값입니다. 어떤 횟수로도 목표를 달성할 수 없으면 yy 자리에 IMPOSSIBLE을 출력합니다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤D≤1091 \le D \le 10^9
  • 2≤∣P∣≤302 \le |P| \le 30
  • PP의 모든 문자는 C 또는 S입니다.

힌트

마지막 세 개의 샘플 케이스는 테스트 세트 1에는 나타나지 않습니다.

샘플 케이스 #1에서 대통령은 두 명령어를 바꿔 총 피해를 1로 줄일 수 있으며, 방패가 이를 견딜 수 있습니다.

샘플 케이스 #2에서는 프로그램이 일으키는 총 피해가 2이고 방패가 이를 이미 견디므로 해킹이 필요하지 않습니다.

샘플 케이스 #3에서는 프로그램이 방패가 견딜 수 있는 양보다 많은 피해를 줍니다. 해킹으로는 이를 바꿀 수 없습니다. 우주는 멸망합니다.

샘플 케이스 #4는 문제 설명의 프로그램을 사용합니다. 해킹 2회로 피해를 5로 줄일 수 있습니다. 대통령은 인접한 명령어만 교환할 수 있으므로, 해킹 1회로는 피해를 6 이하로 줄일 수 없습니다.

샘플 케이스 #5에서는 로봇이 발사하지 않으므로 피해가 없습니다. 해킹은 필요하지 않습니다.

샘플 케이스 #6에서는 해킹이 다섯 번 필요합니다. 같은 두 위치를 바꾸는 해킹이라도 각각 별개의 해킹으로 셉니다.

예제1

  1. 예제 1

    입력
    6
    1 CS
    2 CS
    1 SS
    6 SCCSSC
    2 CC
    3 CSCSS
    
    예상 출력
    Case #1: 1
    Case #2: 0
    Case #3: IMPOSSIBLE
    Case #4: 2
    Case #5: 0
    Case #6: 5