본문 바로가기

Under Construction

탐욕알고리즘 - Lv2(조이스틱)-1(ing)

반응형

테스트 케이스는 통과, 실제 제출에서 시간초과로 실패하고  있다.

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