-
[프로그래머스] 조이스틱ALGORITHM/PROGRAMMERS 2021. 8. 3. 22:10
https://programmers.co.kr/learn/courses/30/lessons/42860
2021-08-03
12345678910111213141516class Solution {public int solution(String name) {int answer = 0;int move = name.length() - 1;for(int i = 0; i < name.length(); i++) {// up & downanswer += Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i)+ 1);int idx = i+1;while(idx < name.length() && name.charAt(idx) == 'A') idx++;move = Math.min(move, i*2+name.length()-idx);}return answer + move;}}cs #문제풀이
왼쪽->오른쪽 체크 + 오른쪽->왼쪽 체크만 했더니 11번 테스트 케이스만 실패했다.
질문하기를 보니 BBAAAAABBB 이러한 경우 문제가 생긴다고 한다.
기존에 짰던 코드로는 저 부분을 추가해서 구현하는게 좀 더러워서? 아예 싹 뜯어고치면서 다른 블로그에서 힌트를 좀 얻었다.
생각이 조금 짧았던 부분이, 상하는 어떤 좌우 방향으로 움직여도 값이 같다. 그래서 문자열 하나하나에 집중하기 보다는 A가 있는 쪽에 집중했어야 하는데 그것을 놓쳤다.
오른쪽 방향으로 움직이면서 A가 연속으로 나오는 케이스에서 왼쪽으로 돌아서 갈지 그냥 계속 갈지 정해주기만 하면 된다. 내가 다음에 갈 문자열이 A인 경우, A가 그만 나올때까지를 체크하여 그 인덱스(idx)를 저장해 놓는다.
그렇게 하면 오른쪽으로 갔다가 다시 왼쪽으로 가는 경우를 i*2 + name.length()-idx로 구할 수 있다.
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] 전화번호 목록 (0) 2021.08.05 [프로그래머스] 방문 길이 (0) 2021.08.04 [프로그래머스] 큰 수 만들기 (0) 2021.08.02 [프로그래머스] 가장 큰 수 (0) 2021.08.02 [프로그래머스] 가장 큰 정사각형 찾기 (0) 2021.08.02