[Programmers] 조이스틱
Note : 이 글은 지극히 주관적인 생각을 토대로 작성된 글입니다. 혹시나 잘못된 부분이 있다면 메일 또는 코멘트를 통해 알려주시면 감사하겠습니다. 😄 제 메일은 About 탭에서 확인하실 수 있습니다. 📧
P.S : 이 페이지는 웹에 최적화 된 페이지입니다. 가급적 모바일이 아닌 웹에서 보시는 것을 추천드립니다.
문제 정보
-
문제 설명
-
조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔
A
로만 이루어져 있습니다.ex)
완성해야 하는 이름이 세 글자면AAA
, 네 글자면AAAA
-
조이스틱을 각 방향으로 움직이면 아래와 같습니다.
-
▲ - 다음 알파벳
-
▼ - 이전 알파벳 (
A
에서 아래쪽으로 이동하면Z
로) -
◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
-
▶ - 커서를 오른쪽으로 이동
-
-
예를 들어 아래의 방법으로
JAZ
를 만들 수 있습니다.-
첫 번째 위치에서 조이스틱을 위로
9
번 조작하여J
를 완성합니다. -
조이스틱을 왼쪽으로
1
번 조작하여 커서를 마지막 문자 위치로 이동시킵니다. -
마지막 위치에서 조이스틱을 아래로
1
번 조작하여Z
를 완성합니다. -
따라서
11
번 이동시켜JAZ
를 만들 수 있고, 이때가 최소 이동입니다.
-
-
만들고자 하는 이름
name
이 매개변수로 주어질 때, 이름에 대해 조이스틱 조작 횟수의 최솟값을return
하도록solution
함수를 만드세요.
-
-
제한 사항
-
name
은 알파벳 대문자로만 이루어져 있습니다. -
name
의 길이는1
이상20
이하입니다
-
-
입출력 케이스
name return “JEROEN” 56 “JAN” 23
소스코드
- 문제 풀이 언어 :
Java
class Solution {
public int solution(String name) {
int answer = 0;
int exp = name.length() - 1;
for (int i=0; i<name.length(); i++) {
char currentChar = name.charAt(i);
answer += currentChar <= 'N' ? currentChar - 'A'
: ('Z' - currentChar) + 1;
int nextIndex = i + 1;
while (nextIndex < name.length() && name.charAt(nextIndex) == 'A')
nextIndex++;
int tmp = i + name.length() - nextIndex +
Math.min(i, name.length() - nextIndex);
exp = exp > tmp ? tmp : exp;
}
answer += exp;
return answer;
}
}