‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀
문제 👉 <코딩테스트 연습 - 조이스틱 | 프로그래머스>
1. 문제
모든 글자가 A로 구성된 문자를 조이스틱을 최소한의 조작 횟수로 원하는 문자를 만들어야 한다.
조이스틱을 각 방향으로 움직이면 아래와 같다.
▲ - 다음 알파벳
▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로)
◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
▶ - 커서를 오른쪽으로 이동
2. 풀이
Greedy
를 이용한 문제 풀이
알파벳 변경을 위해 A->B->C 방향과 A->Z->Y 방향 중 가까운 것으로 한다.
커서 이동을 할 경우 연속된 A가 나오면 이동할 커서의 값이 줄어든다.
- 커서를 오른쪽으로 순서대로 이동하는 경우 (array.length - 1)
- Ex) ABCAAAAAADC : A->B->C->A->...->A->D->C = 10칸
- 현재 위치에서 다음 값이 A의 연속일 경우 다시 맨 왼쪽으로 이동 후 연속된 A가 끝나는 지점의 다음으로 이동
- Ex) ABCAAAAAADC : A->B->C->B->A->C->D = 6칸
- 현재 위치(C)에서 맨 왼쪽으로 이동 : 2+2
- 연속된 A가 끝나는 지점의 다음(D)으로 이동 : 2
- 커서를 오른쪽으로 순서대로 이동하는 경우 (array.length - 1)
3. 코드
class Solution {
public int solution(String name) {
int answer = 0;
int len = name.length();
int min_move = len-1; // 커서를 오른쪽으로 순서대로 이동할 경우
for (int i=0; i<len; i++) {
// 알파벳 변경
answer += Math.min(name.charAt(i)-'A', 'Z'-name.charAt(i)+1);
// A가 아닌 다음 값 찾기
int next = i+1;
while (next < len && name.charAt(next) == 'A') {
next++;
}
min_move = Math.min(min_move, i+i + len-next);
}
return answer + min_move;
}
}
References
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 체육복 [JAVA(자바)] (0) | 2021.11.25 |
---|---|
[프로그래머스] 카펫 [JAVA(자바)] (0) | 2021.11.25 |
[프로그래머스] 모의고사 [JAVA(자바)] (0) | 2021.11.25 |
댓글