조이스틱으로 알파벳 이름을 완성하시오. 맨 처음은 무조건 A로만 이루어져 있다.
ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA
- 첫 번째 위치에서 조이스틱을 위로 9번 조작하여 J를 완성합니다.
- 조이스틱을 왼쪽으로 1번 조작하여 커서를 마지막 문자 위치로 이동시킵니다.
- 마지막 위치에서 조이스틱을 아래로 1번 조작하여 Z를 완성합니다.
따라서 11번 이동시켜 "JAZ"를 만들 수 있고, 이때가 최소 이동입니다.
경우의 수
class Solution {
public int solution(String name) {
int answer = 0;
//char형의 배열로 name문자열을 변경
char[] charArr = name.toCharArray();
int[] alpaNum={0,1,2,3,4,5,6,7,8,9,10,11,12,13,12,11,10,9,8,7,6,5,4,3,2,1};
//foreach구문 활용함
for(char c:charArr)
//c-'A' 문자를 숫자로 변환하기 위해서 사용함
answer+=alpaNum[c-'A'];
//문자열의 길이
int length=name.length();
//최소값을 구하기 위해서 min 변수안에 문자열의 길이 -1을 넣어줌
int min=length-1;
//문자열의 길이만큼 반복문
for(int i=0;i<length;i++){
//next변수를 선언한 후 i에 +1을 해줌
int n=i+1;
//n이 문자열의 길이보다 작으면서 A이 있는지 확인하는 것
//charAt은 문자열 중에 한 문자만 골라서 char형으로 변환시켜주는 것
while(n < length && name.charAt(n)=='A'){
n++;
}
//i + length - n은 인덱스가 i인 문자의 바로 오른쪽 옆에 오는 A의 개수, Math.min(i, length-n)을 통해
//왼쪽에서 접근하는 경우와 오른쪽에서 접근하는 경우 중 작은 숫자와 더해 최소값
int compare = i + length - n + Math.min(i,length-n);
//최소 경로를 구함
min = Math.min(min,compare);
}
answer += min;
return answer;
}
}
코드 해설
1. char[] charArr = name.toCharArray();
//char형의 배열로 name문자열을 변경
2. alpaNum[c-'A'];
문자열을 아스키코드 숫자로 변경하기 위해서 사용함
3. Math.min(min,compare);
최소 경로를 구하는 코드