https://programmers.co.kr/learn/courses/30/lessons/42860#
풀이
조이스틱의 이동횟수만 구하면되기 때문에, 상하와 좌우 이동을 따로 계산한다.
상하이동은 A-Z의 알파벳이 총 26개로 이루어져있기 때문에 중간알파벳인 N을 기준으로 이동횟수를 더해주면 되었다.
N보다 작으면 A를 빼주고 N보다 크다면 Z에서 빼준뒤 1을 더해 계산한다.
좌우이동은 2가지를 고려해야한다.
- 계속 오른쪽으로 이동 : 이동횟수 = (문자열의 길이) - 1
- 오른쪽으로 가다가 A를 만날경우 왼쪽으로 이동 : 이동횟수 = (A만나기 전 오른쪽 이동횟수) + (왼쪽 이동횟수)
이 2가지 이동횟수를 비교해서 더 작은 쪽으로 이동한다.
주의할 점은 마지막까지 A만 있을 경우인데, 이 경우에는 다시왼쪽으로 돌아갈 필요가 없다는 점을 유의하자!
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++){
// 상하이동
if(name.charAt(i)<'N'){
answer += name.charAt(i)-'A';
}else{
answer += 'Z' - name.charAt(i)+1;
}
// A의 마지막 위치구함
int conA = i+1;
while(conA <len && name.charAt(conA) =='A'){
conA++;
}
// 좌우이동
move = Math.min(move, i+(len-conA)+Math.min(i,len-conA));
}
return answer+move;
}
}
'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 Lv2 : 프린터 (0) | 2022.03.11 |
---|---|
[Java] 프로그래머스 Lv.2 : 위장 (0) | 2022.03.09 |
[Java] 프로그래머스 Lv2 > 삼각 달팽이 (0) | 2022.03.06 |
[Java] 프로그래머스 Lv.2 > 전화번호 목록 (0) | 2022.03.04 |
[Java] 프로그래머스 Lv.2 > 124 나라의 숫자 (0) | 2022.03.04 |