[Programmers] 조이스틱
Date:
[Programmers] 조이스틱
Problem URL : 조이스틱
#include <string>
#include <vector>
using namespace std;
int solution(string name) {
int answer = 0;
int size = name.length();
// 세로 조작 횟수
for(int i = 0; i < size; i++) {
int a = name[i] - 'A';
int b = 'Z' - name[i] + 1;
if (a > b) {
answer += b;
}else{
answer += a;
}
}
// 가로 조작횟수 (최대 size - 1)
int add = size - 1;
for(int i = 0; i < size; i++) {
int count = 0; // 연속된 A의 개수
int j = 0;
if(name[i] == 'A'){
count ++;
while(i + j + 1 < size && name[i + j + 1] == 'A'){
j++;
count++;
}
int tmp;
if(i == 0){
// 첫자리가 A일 때
tmp = size - 1 - count;
}else{
int a = size - 1 - count + (i - 1); // 오른쪽으로 먼저 이동했을 때
int b = size - 1 - count + (size - i - count); // 왼쪽으로 먼저 이동했을 때
if(a < b){
tmp = a;
}else {
tmp = b;
}
}
if(add > tmp) {
add = tmp;
}
i += j;
}
}
answer += add;
return answer;
}
댓글