[プログラマー/C+]JOYSTIC-Greedy


質問する


https://programmers.co.kr/learn/courses/30/lessons/42860

に答える


前の文字または次の文字/次のカーソルまたは最後のカーソル
何が一番いい年なのか、毎回比較する典型的なgreedy問題!
(アクセス自体の扱い方が全くわからなかったので、他の人のコードを参考にしましたが、JOY STICが途中で方向を変えることを考えていなかったので大変でした)
反例)ABABAAAAAB

コード#コード#

#include <string>

using namespace std;

int solution(string name) {
    int answer = 0;
    int n = name.length();
    int turn = n-1;
    
    for(int i=0; i<n; i++) {
        if(name[i] - 'A' < 14) {
            answer += name[i] - 'A';
        }
        else {
            answer += 'Z' - name[i] + 1;
        }
        
        int index = i+1;
        while(index < n && name[index] == 'A') {
            index++;
        }
        
        int a = i;
        int b = n - index;
        turn  = min(turn, min(2*a+b, a+2*b));
    }
    
    answer += turn;
    return answer;
}