class 조이스틱_230619 {
public int solution(String name) {
int answer = 0;
int length = name.length(); //받아온 name의 길이
int index; // 다음 값들을 확인할 때 사용
int move = length - 1; // 좌우 움직임 수를 체크
for(int i = 0; i < name.length(); i++){
answer += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1);
index = i + 1;
// 연속되는 A 갯수 확인
while(index < length && name.charAt(index) == 'A'){
index++;
}
// 순서대로 가는 것과, 뒤로 돌아가는 것 중 이동수가 적은 것을 선택
move = Math.min(move, i * 2 + length - index);
move = Math.min(move, (length - index) * 2 + i);
}
return answer + move;
}
}
위의 코드는 "name"이라는 문자열을 입력받아 조작해야 하는 최소한의 움직임 수를 계산하는 "solution"이라는 메서드를 포함한 Java 클래스입니다. 이 메서드는 정수형 값을 반환합니다.
코드를 자세히 살펴보면 다음과 같은 동작을 수행합니다:
1. 초기화 단계:
- "answer" 변수를 0으로 초기화합니다. 이 변수는 조작해야 하는 문자의 변경 수를 저장합니다.
- "length" 변수에는 입력된 "name" 문자열의 길이가 저장됩니다.
2. 문자 변경 수 계산:
- "name" 문자열의 각 문자를 반복하면서 변경 수를 계산합니다.
- "answer" 변수에는 문자를 변경하는 데 필요한 최소 움직임 수가 누적됩니다.
- 각 문자에 대해 다음 중 작은 값을 "answer"에 더합니다:
- 'A'부터 해당 문자까지 알파벳을 오름차순으로 이동하는 경우의 움직임 수.
- 해당 문자부터 'Z'까지 알파벳을 내림차순으로 이동하는 경우의 움직임 수.
3. 이동 수 계산:
- "index" 변수를 사용하여 다음 값들을 확인합니다.
- 현재 인덱스 "i"의 다음 인덱스부터 문자열의 끝까지 반복하면서 'A'인 문자의 연속된 갯수를 확인합니다.
- "index" 변수에는 연속된 'A' 이후의 첫 번째 문자의 인덱스가 저장됩니다.
- 순서대로 이동하는 경우와 역순으로 이동하는 경우 중 더 적은 이동 수를 "move" 변수에 저장합니다.
- "move" 변수에는 좌우 움직임 수가 저장됩니다.
4. 결과 반환:
- "answer"에 "move"를 더한 값을 반환합니다. 이 값은 문자 변경 수와 좌우 움직임 수의 합으로, 전체적인 최소 움직임 수를 나타냅니다.
이 코드는 "조이스틱"이라는 게임에서 플레이어가 주어진 이름을 완성하기 위해 필요한 최소한의 조작 횟수를 계산하는 알고리즘입니다. 문자 변경 수와 좌우 움직임 수를 최소화하여 최적의 조작 횟수를 찾습니다.
댓글
댓글 쓰기