https://www.codewars.com/kata/54bb6f887e5a80180900046b/train/c
코드를 어찌어찌 짜고는 있는데, 기껏 2차원 배열로 나눠서 공백도 검사하게 했더니
공백은 단순하게 return값만 더해주는 거였고, instruction에는 없는 안써놨던 사항이라 제대로 낚여서
덕분에 3중 for문으로 구현하고 있는 중인데.. 아래 예시처럼 해보는 중임다.
ex) fff abcd cbae eee 라는 char*이 있다고 하면 리턴은 abcd cba<< 가 가장 기니까 8 반환해야 함.
1) 일단 공백 카운트는 별도로 세고, 1차원 배열 안에 다 붙여서 정렬.
2) fffabcdcbaeeee에서 제일 첫 f와 제일 끝e ~ 두 번째 f까지 비교.
3) fff를 찾아내어 3 저장.
4) 2번째 f, 3번째 f도 마찬가지로 수행하나, 3번에서 찾은 3보다는 결과가 적어 3을 저장.
5) a까지 왔을 때는 문장 내에 다른 a가 존재하고, 마찬가지로 찾아냄.
6) b와 b도 대칭임을 확인 -> c와 c도 대칭임을 확인 -> 모두 맞는 것을 확인.
7) abcd cba 길이(8) 리턴(스페이스 위치 구하는 것도 별도로 구해서 구현 완료했음.)
요런 식인데 어떤지...
단순하게 앞뒤를 비교하는게 아니라 넘 복잡해서 아이디어 있나 물어봄다.
프갤에 먼저 올려봤는데 댓글이 1도 없어서 PS갤에 도움요청합니다.
이거 때문에 몇십시간 쓴 것 같은데 도저히 안풀려서요... ㅠㅠ
깃허브에 소스코드 저장되어 있는데 코드리뷰까지 도움요청하면 너무 염치없는 듯 해서 알고리즘 팁만 살짝 여쭤봅니다.
그냥 최장 팰린드롬 길이 찾는 문제지? 단순하게 O(N^2)로 짤 수 있고 DP O(N^2)도 가능, O(N) 풀이도 존재함
최장 팰린드롬 맞습니당. O(N^2)도 된다니 그건 좀 컬쳐쇼큰데요.. 참고하겠습니다. 감사합니다.
와! "그 알고리즘" 아시는구나! 매내처!
3중 for문을 사용해본다는 기조로 일단 O(N^3) 기준으로 풀어봤고, 이상 없이 제출 완료했습니당. 대신 Manacher's Algorithm에 대해 공부할 수 있었어요. 감사합니다!