코드를 조금더 다듬을 수 있을 것 같지만... 그냥 올렸습니다.


해결 원리는


*의 길이가 여러개가 될 수 있으므로 이를 처리하기위해 재귀적으로 코드를 작성했다.


front는 입력 문자열의 앞에서부터 탐색하는 인덱스, end는 입력 문자열의 뒤에서부터 탐색하는 인덱스 이다.


1. end <= front인 경우에는 문자열을 탐색하는 과정에서 틀린 문자열을 발견하지 않고 다 탐색했다는 의미이므로 팰린드롬이 된다. 그러므로 1을 반환한다.


2. front와 end가 '*'이 아닌데 해당 문자가 서로 다른 문자인 경우 팰린드롬이 아니므로 0을 반환한다.


3. front와 end가 '*'이 아니면서 두 문자가 같으면 그다음 인덱스를 탐색하기위해 재귀 호출한다.


4. front와 end가 둘다 '*'인 경우에는

 1) 둘다 없다고 생각하고 재귀 호출

 2) front 나 end 둘중 하나만 없다고 생각하고 재귀 호출

 3) front를 길이 1부터 최대 K까지 해당하는 문자로 보고 재귀호출 ( 길이 K는 end와 end-j가 같지 않을 때 까지 해당한다)

 4) end도 3)과 마찬가지로 생각한다.


5. front가 '*' 일때, end가 '*'일 때에도 4. 와 마찬가지로 반복한다.



나같은 경우는 처음 코드를 작성했을 때, '*'이 여러개 입력으로 주어졌을 때, 제대로 처리가 되지 않았다. 그래서 아래 테스트 입력 예시 마지막 이 Not exist가 나왔었다. 결국 코드를 재귀적으로 바꾸면서 해결했다.


테스트 입력 예제


'코딩,문제풀이 > SWExpertAcademy' 카테고리의 다른 글

3456. 직사각형 길이 찾기(D3)  (0) 2018.06.24
4371. 항구에 들어오는 배(D3)  (0) 2018.06.24
3499. 퍼펙트 셔플(D3)  (0) 2018.06.24
3750. Digit sum(D3)  (0) 2018.06.24
3809. 화섭이의 정수 나열(D3)  (0) 2018.06.24

+ Recent posts