parent link: Hash
SW Expert Academy#
Excerpt#
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
※ SW expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
****
제한 조건 | 실행시간 : 최대 10개의 테스트 케이스를 합쳐서 C++ 의 경우 1초 / Java 의 경우 2초 메 모 리 : Heap, Global, Stack 등을 모두 합해 최대 256MB까지 사용 가능 (단, 스택은 최대 1MB까지 사용 가능) |
제출 횟수 제한 | 99회 |
채점 | 답안을 제출하면 제공된 sample_input.txt 에 대한 결과를 판정해서 실시간으로 알려주며 그 의미는 다음과 같다. Accept : sample input에 대하여 정답 또는 부분 점수 획득 Fail : sample input에 대하여 오답 또는 런타임 에러, time out 등 (※ sample_input.txt 파일 다운로드는 문제 지문 바로 아래에 있습니다) 최종결과는 별도의 채점용 input으로 진행되므로 시험 중 판정 결과와 다를 수 있다. |
평가 | 최종 점수는 별도로 제작된 평가용 테스트 케이스로 측정하며, 동점자간에는 실행시간에 따라 점수 차이가 발생할 수 있습니다. 따라서 시험이 끝날 때까지 본인의 코드를 최적화 하시기를 권장합니다. |
[문제 설명]
문자열을 주어진 암호화 규칙에 따라서 변환하는 프로그램을 구현하고자 한다.
이 규칙은 전체 문자열 중 부분 문자열 A 를 B 로 변환하는 규칙이다.
규칙을 적용하는 방법은 다음과 같다.
- 전체 문자열을 처음 index 부터 탐색하여, 부분 문자열이 A 인지 판단한다.
- A 가 아닐 경우 다음 index 의 부분문자열을 탐색한다.
- A 일 경우 해당 index 의 부분문자열을 B 로 변환하고, index 를 A 의 길이만큼 증가시킨 후 탐색을 계속한다.
당신은 규칙이 주어지는 순서에 따라 문자열을 변환하여 최종 문자열을 구해야 한다.
아래 API 설명을 참조하여 각 함수를 구현하라.
※ 아래 함수 signature는 C/C++에 대한 것으로 Java에 대해서는 제공되는 Solution.java와 UserSolution.java를 참고하라.
아래는 User Code 부분에 작성해야 하는 API 의 설명이다.
void init(int N, char init_string[]) |
각 테스트 케이스의 처음에 호출된다. 변환을 할 원본 문자열이 주어진다. Parameters N : 원본 문자열의 길이 init_string[] : 원본 문자열. |
int change(char string_A[], char string_B[]) |
string_A 와 일치하는 부분문자열을 string_B로 바꾼다. Parameters string_A : 규칙을 이루는 문자열에서 찾아 변환시킬 문자열이다. string_B : string_A 를 대체할 문자열 (string_A, string_B) 의 각 길이는 3이다. Returns num : 변경한 부분 문자열의 개수를 반환한다. |
void result(char ret[]) |
최종 문자열 상태를 ret 배열에 반환한다. 이 함수는 각 테스트케이스 마지막에 한번만 호출된다. |
[예제]
Order | Function | Note | Figure |
1 | init(10, “baaabbbbbb”) | ||
2 | change(“baa”, “aba”) | return 1 | |
3 | change(“aaa”, “bba”) | return 0 | |
4 | change(“bbb”, “abb”) | return 2 | [Fig. 1] |
5 | result() | return “abaaabbabb” |
testcase 1번 예제 입력에 대해서 설명하겠다.
초기 문자열은 “baaabbbbbb” 이다.
이 후 3번의 change() 함수가 호출된다.
첫번째 change(“baa, “aba”) 함수가 호출되면 파란색으로 표시한 부분문자열 “baa” 가 “aba” 로 변경된다.
“baaabbbbbb” => “abaabbbbbb”
변경 할 부분문자열은 1개이므로 change(“baa”,”aba”) 함수의 반환 값은 1이다.
두번째 change(“aaa”, “bba”) 함수가 호출되었을 때 부분문자열 중 “aaa” 가 하나도 존재하지 않으므로,
이 함수의 반환 값은 0 이다.
세번 째 change(“bbb”, “abb”) 함수가 호출 되면 부분문자열 “bbb” 의 개수는 4 개이다.
하지만, 변환 규칙에 의해 0 번 index 부터 순차적으로 검사하기 때문에 총 변환되는 부분문자열의 개수는 2 이다.
변환이 되는 index는 [Fig. 1] 과 같다.
마지막으로 result(char ret[]) 함수가 호출되면 ret 배열에 최종문자열 “abaaabbabb” 를 저장하여 반환한다.
[제약사항]
1. 각 테스트 케이스 시작 시 init() 함수가 호출된다.
2. 문자열의 길이는 최대 50,000 이다.
3. 각 테스트 케이스에서 문자열은 영어 소문자로 이루어져 있으며 항상 ’\0’ 으로 끝난다.
4. 변환할 문자열의 길이는 항상 3 이다.
5 각 테스트 케이스에서 change() 함수가 호출되는 횟수는 최대 50,000 이다. result() 함수는 1 번만 호출 된다.
[입출력]
입출력은 제공되는 Main 부분의 코드에서 처리하므로 User Code 부분의 코드에서는 별도로 입출력을 처리하지 않는다.
Sample input 에 대한 정답 출력 결과는 아래와 같은 형태로 보여진다.
100
100
100
100
100