-
[프로그래머스] 탐욕 알고리즘 - 조이스틱알고리즘 공부/문제 풀이 2020. 8. 18. 15:02
public static int solution(String name) { int answer = 0; char[] arr = name.toCharArray(); char[] temp=new char[arr.length]; int left = 0, down = 0, up = 0, right = 0; char check; // 진행방향 나타내는 변수 //temp 초기화 for(int i=0;i<arr.length;i++) temp[i]='A'; //왼쪽으로 진행하면 몇칸까지 가야하는지 for (int i = 1; i < arr.length; i++) { if(arr[i] !='A') { left=arr.length-i; break; } } //오른쪽으로 진행하면 몇칸까지 가야하는지 for (int i = arr.length-1; i > 0; i--) { if(arr[i] !='A') { right=i; break; } } //더 적은 수로 check 초기화 check = right <= left ? 'r' : 'l'; up = arr[0] - 'A'; down = 'Z' - arr[0] + 1; if (up <= down) answer += up; else answer += down; temp[0]=arr[0]; answer++; //진행방향이 오른방향일 때 if (check == 'r') { for (int i = 1; i < arr.length; i++) { if(Arrays.equals(arr, temp)) break; up = arr[i] - 'A'; down = 'Z' - arr[i] + 1; if (up <= down) answer += up; else answer += down; temp[i]=arr[i]; answer++; } } //진행방향이 왼방향일때 if (check == 'l') { for (int i = arr.length-1; i >= 0; i--) { if(Arrays.equals(arr, temp)) break; up = arr[i] - 'A'; down = 'Z' - arr[i] + 1; if (up <= down) answer += up; else answer += down; temp[i]=arr[i]; answer++; } } return answer - 1; }
처음에 조이스틱의 왼쪽,오른쪽 진행방향을 구한다.
중간에 왼쪽,오른쪽 방향의 전환이 없다는 가정하에 풀었다.. 그래서 테스트케이스 11번 MISS...
선택된 진행방향으로 up,down을 계산해가며 적은 값을 선택하여 정답에 더하고,
temp라는 임의의 배열을 만들어 정답과 같아졌을 때 반복문을 나온다.
temp와 arr혹은 name 비교에 있어.. 잘 안되던 것이
temp.equals(arr), temp.equals(name)의 비교가 안되어..
그냥 Arrays.equals(arr,temp)를 사용하였다.
테스트 케이스 11번은
AAAABAAAAAAAAABB 정답에 7로 나오면 해결될 듯 하다...ㅎ
코드 구조 바꾸기 싫어서 이정도로 하고 패스~ ㅋㅋㅋㅋㅋ
'알고리즘 공부 > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 탐욕 알고리즘 - 섬 연결하기 (1) 2020.08.18 [프로그래머스] 탐욕 알고리즘 - 구명보트 (1) 2020.08.18 [프로그래머스] 탐욕 알고리즘 - 큰 수 만들기 (2) 2020.08.17 [프로그래머스] 탐욕 알고리즘 - 체육복 (2) 2020.08.17 [프로그래머스] 완전 탐색 - 소수 찾기 (1) 2020.08.16