8006 : 문자열 암호화
•시간제한: 2.000 S
•메모리제한: 256 MB
•제출: 0
•통과: 0
•만든사람: suakii
문제 설명
특정한 규칙을 기반으로 평문을 암호문으로 변환하는 암호화 프로그램을 작성하십시오.
[암호화 규칙]
1. 알파벳 소문자 모음($V$)은
2. 알파벳 소문자 자음($C$)은
3. 변환하려는 글자 $c$가 입력 문자열 내에서 등장한 누적 횟수를 $k$라고 합니다 ($k \ge 1$).
4. 만약 $c$가 모음인 경우, 무한 모음 문자열에서 $c$의 $k$번째 등장 인덱스를 구한 후, 무한 자음 문자열의 해당 인덱스에 있는 자음으로 대체합니다.
5. 만약 $c$가 자음인 경우, 무한 자음 문자열에서 $c$의 $k$번째 등장 인덱스를 구한 후, 무한 모음 문자열의 해당 인덱스에 있는 모음으로 대체합니다.
[제약 조건]
• $1 \le T \le 100$ (테스트 케이스 수)
• 각 테스트 케이스 문자열의 길이는 $1$ 이상 $50,000$ 이하이며 알파벳 소문자로만 구성됩니다.
[암호화 규칙]
1. 알파벳 소문자 모음($V$)은
aeiou의 순서로 무한히 반복됩니다. (aeiouaeiou...)2. 알파벳 소문자 자음($C$)은
bcdfghjklmnpqrstvwxyz의 순서로 무한히 반복됩니다. (bcdfghjklmnpqrstvwxyz...)3. 변환하려는 글자 $c$가 입력 문자열 내에서 등장한 누적 횟수를 $k$라고 합니다 ($k \ge 1$).
4. 만약 $c$가 모음인 경우, 무한 모음 문자열에서 $c$의 $k$번째 등장 인덱스를 구한 후, 무한 자음 문자열의 해당 인덱스에 있는 자음으로 대체합니다.
5. 만약 $c$가 자음인 경우, 무한 자음 문자열에서 $c$의 $k$번째 등장 인덱스를 구한 후, 무한 모음 문자열의 해당 인덱스에 있는 모음으로 대체합니다.
[제약 조건]
• $1 \le T \le 100$ (테스트 케이스 수)
• 각 테스트 케이스 문자열의 길이는 $1$ 이상 $50,000$ 이하이며 알파벳 소문자로만 구성됩니다.
입력 설명
첫째 줄에 테스트 케이스의 개수 $T$가 주어집니다.
다음 $T$개의 줄에 걸쳐 암호화할 문자열이 한 줄에 하나씩 주어집니다.
다음 $T$개의 줄에 걸쳐 암호화할 문자열이 한 줄에 하나씩 주어집니다.
출력 설명
각 테스트 케이스에 대해 암호화된 문자열을 한 줄에 하나씩 출력합니다.
입력 예시
COPY
복사되었습니다!
복사되었습니다!
2
baax
aaa
출력 예시
COPY
복사되었습니다!
복사되었습니다!
abho
bhn
도움
각 문자의 누적 등장 횟수를 해시 맵(딕셔너리)이나 26 크기의 배열로 세어가며 $O(N)$ 시간 복잡도로 빠르게 변환할 수 있습니다.