728x90
import java.util.*;
class Solution{
public int solution(String name){
int answer = 0;
int len = name.length();
int move = len - 1; // 초기 값은 오른쪽으로 쭉 이동할 때의 값으로 잡음
for(int i=0; i<len ; i++){
//초기 값 A부터 시작해서 name의 i번째 글자가 되기 위한 값 구하기
//상하 이동 횟수 중 최솟값을 answer에 더해주기
answer += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1);
int nextA = i+1;
//다음 문자가 A라면 반복문을 돌면서 A가 몇번 연속되는지 확인
while(nextA < len && name.charAt(nextA)=='A') {
nextA++;
}
//앞에 먼저 탐색
//1. i 만큼 갔다가 i 만큼 돌아오기 = 2*i
//2. A 모임의 끝부분~ 글자의 끝부분 = len - nextA;
move = Math.min(move, 2*i + len - nextA);
//뒤에 먼저 탐색
//1. 글자의 끝부분에서 a모임의 끝부분까지 다녀오기 = (len - nextA) * 2
//2. i 만큼 가기
move = Math.min(move, 2*(len-nextA) + i);
}
return answer + move;
}
}
name = bcaad 일 때
i | ||||
b | c | a | a | d |
b -> c -> b -> d 순서로 갈 수 있고,
b -> d -> b -> c 순서로 갈 수 있는것?
그림으로 그려가면서 계산하기!
728x90
'CodingTest' 카테고리의 다른 글
코딩테스트 연습 탐욕법(Greedy) 섬 연결하기 JAVA (0) | 2025.03.04 |
---|---|
프로그래머스 코딩테스트 연습 탐욕법 구명보트 JAVA (1) | 2025.03.04 |
프로그래머스 탐욕법 체육복 자바 (1) | 2025.02.25 |
프로그래머스 코딩테스트 연습 완전탐색 모음사전 자바 (0) | 2025.02.24 |
[코딩테스트 JAVA] 완전 탐색 - 소수 찾기 (1) | 2025.02.21 |
댓글