2021 NAVER漫画開発チャレンジ1回コードテスト2回
13518 ワード
説明:
[問題は非公開]
に答える
[問題は非公開]
に答える
import java.util.*;
import java.util.stream.*;
class Solution {
public String[] solution(String s) {
// 한 글자, 두 글자 문자열 예외처리.
if(s.length() == 1) {
return new String[]{s};
}
if(s.length() == 2) {
if(s.charAt(0) == s.charAt(1)) {
return new String[]{s.substring(0, 1), s.substring(1, 2)};
} else {
return new String[]{s};
}
}
// 양 끝에서 동시에 비교하기 위한 포인터.
char[] chars = s.toCharArray();
int startIndex = 0;
int endIndex = 1;
int remoteStartIndex = s.length() - 1;
int remoteEndIndex = s.length();
int limit = s.length() % 2 == 1 ? s.length() / 2 + 1 : s.length() / 2;
List<String> answer = new ArrayList<>();
// 양 끝 단어들이 서로 교차되지 않을 때까지 탐색.
while(endIndex < remoteStartIndex) {
// found palindrome word.
if(Arrays.compare(chars, startIndex, endIndex, chars, remoteStartIndex, remoteEndIndex) == 0) {
answer.add(s.substring(startIndex, endIndex));
startIndex = endIndex;
remoteEndIndex = remoteStartIndex;
}
endIndex++;
remoteStartIndex--;
}
// 아무런 단어 쌍도 찾지 못했다면 문자열을 그대로 반환.
if(answer.size() == 0) {
return new String[]{s};
}
// 역순으로 삽입.
int listIndex = answer.size()-1;
if(endIndex == remoteStartIndex) {
answer.add(s.substring(endIndex, endIndex+1));
listIndex = answer.size()-2;
}
while(listIndex >= 0) {
answer.add(answer.get(listIndex--));
}
return answer.toArray(new String[0]);
}
}
やはり文字列処理の問題ですが、初めてのタイプなのでちょっと手を焼いてしまいます.2つのポインタの解答を解決して、開始点は包容性で、終了点は排他性で、考えなければならないものがたくさんあって、時間を無駄にしたようです.結局全部解けなかった.Reference
この問題について(2021 NAVER漫画開発チャレンジ1回コードテスト2回), 我々は、より多くの情報をここで見つけました https://velog.io/@park2348190/2021-네이버-웹툰-개발-챌린지-1차-코딩테스트-2번テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol