Skip to content

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 로 변환하는 규칙이다.

규칙을 적용하는 방법은 다음과 같다.

  1. 전체 문자열을 처음 index 부터 탐색하여, 부분 문자열이 A 인지 판단한다.
  2. A 가 아닐 경우 다음 index 의 부분문자열을 탐색한다.
  3. 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