매일 조금씩

[C++] 프로그래머스 : 조이스틱 본문

알고리즘/그리디

[C++] 프로그래머스 : 조이스틱

mezo 2021. 2. 2. 00:26
728x90
반응형

#include <string>
#include <vector>
#include <stdlib.h>

using namespace std;


int solution(string name) {
    
    int* arr = new int[name.length()];
    int change = 0;
    int len = name.length();
    for(int i = 0; i < len; i++){
        if(name[i] == 'A'){
            arr[i] = 1; 
            change++;
        }
        else{
            arr[i] = 0;
        }
    }
    
    int answer = 0;
    int sum = 0; 
    int i = 0;
    
    while(change != len){
        char cur = name[i];
        if(cur != 'A'){
            if((cur - 'A') >= (('Z'+1) - cur)){
                sum += (('Z'+1) - cur);
            }
            else{
                sum += (cur - 'A');
            }
            arr[i] = 1;
            change++;
        }
        for(int j = 1; j<= len/2; j++){
            int right = (i+j)%len;
            int left = abs(i-j+len)%len;
            if(arr[right] != 1){
                i = right;
                sum+= j;
                break;
            }else if(arr[left] != 1){
                i = left;
                sum+=j;
                break;
            }
        }
    }
    
    answer = sum;
    
    return answer;
}
728x90
반응형