반응형
테스트 케이스는 통과, 실제 제출에서 시간초과로 실패하고 있다.
class Solution {
public int solution(String name) {
int answer=0;
char[] nameToChar=name.toCharArray(); //name을 char[]으로 변환
int strLength=name.length();
int[] charCount= new int[strLength]; //각 배열마다 A를변경하는 값을 기록하기 위함.
int wordCost=0; //A를 변경한 횟수
int moveCost=0; //커서를 옮긴 횟수
int wordCount=0; //A가 아닌 문자열의 수
//단어변환시 드는 소모값 계산
for(int i=0; i<strLength; i++) {
charCount[i] = nameToChar[i]-65; //char형을 아스키코드로 전환, A일때 변환 필요가 없으므로 0이다.
if(charCount[i]>13) {// A에서 변환하는 횟수가 절반이상이면 반대로 접근하는것이 더빠르다.
charCount[i] = 26 - charCount[i];
}
//A가 아닌 단어들의 갯수 계산
if(charCount[i]>0){
wordCount++;
}
wordCost = wordCost + charCount[i];
}
//커서움직일때 드는 값 변환
int cur=0; //nameToChar배열의 현재 가리키는 위치 변수
while(wordCount>0){ // A가아닌 알파벳들을 모두 거칠때까지 반복한다.
int distance=1; // 움직인 거리
int next=(cur+distance)>=strLength ? strLength-cur : cur+distance;
int prev=(cur-distance)<0 ? strLength-1+cur : cur-distance;
if(nameToChar[cur]!='A'){
nameToChar[cur]='A';
distance=1;
wordCount--;
}else if(nameToChar[next]!='A') {
nameToChar[next]='A';
cur=next;
moveCost+= distance;
distance=1;
wordCount--;
}else if(nameToChar[prev]!='A') {
nameToChar[prev]='A';
cur=prev;
moveCost+= distance;
distance=1;
wordCount--;
} else{
distance++;
}
}
answer=moveCost+wordCost;
return answer;
}
}
반응형
'Under Construction' 카테고리의 다른 글
Pagination(Pageable)? (0) | 2022.08.24 |
---|---|
완전탐색 - Lv1(모의고사)-1(ing) (0) | 2021.08.01 |
정렬알고리즘 - Lv2(가장 큰수)-1(ing) (0) | 2021.07.22 |