반응형
풀이 성공!.....
다른사람들의 풀이를 보니, 소스코드가 엄청 간단한것들이 많다... 후.....
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
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로 변경하는 값을 기록하기 위함.
int wordCost=0; //A를 변경한 횟수
List<Integer> wordCountList = new ArrayList<>(); //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){
wordCountList.add(i);
}
//단어변환 시 드는 비용 계산
wordCost = wordCost + charCount[i];
}
//커서움직일때 드는 값 변환
int cur=0; //nameToChar배열의 현재 가리키는 위치 변수
int moveCost=0; //커서를 옮긴 횟수
while(wordCountList.size()>0) {
Integer[] tmp = new Integer[wordCountList.size()]; //A가아닌 글자로 옮길 소요값 저장하는 임시배열
int nearestDistance = strLength/2; // 현재위치에서 가장 작은 소요값을 찾기위한 변수
int listIndex = 0; //가장 작은 소요값의 위치를 확인할 인덱스 변수
for(int word=0; word<wordCountList.size(); word++) {
tmp[word] = Math.abs(wordCountList.get(word)-cur) > strLength/2 ?
strLength-Math.abs(wordCountList.get(word)-cur) :
Math.abs(wordCountList.get(word)-cur);
if(nearestDistance>tmp[word]) {
nearestDistance = tmp[word];
listIndex = word;
}
}
cur = wordCountList.get(listIndex);
wordCountList.remove(listIndex);
moveCost+=nearestDistance;
}
answer=moveCost+wordCost;
return answer;
}
}
반응형
'알고리즘' 카테고리의 다른 글
완전탐색-카펫(lv2) (0) | 2022.07.26 |
---|---|
정렬알고리즘 - Lv2(가장 큰수)-1(completed) (0) | 2021.07.26 |
정렬알고리즘 - Lv1(K번째수)-1(completed) (0) | 2021.07.19 |
탐욕알고리즘 - Lv1(체육복)-2 (0) | 2021.07.12 |
탐욕알고리즘 - Lv1(체육복) (0) | 2021.07.04 |