분류에 그리드 알고리즘으로 되어있어서 그리드로 접근했었지만,
추가된 테스트케이스에서 그리드로 풀리지 않는 케이스들이 추가된것으로 보였다.
따라서 "알파벳을 바꾸는 움직임 + 문자열 자리를 이동하는 움직임"의 최솟값을 구하는 방법으로 바꾸었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | def solution(name): answer = 0 name = list(name) max_a_len = 0 check = 0 index = 0 for n in name: if n != 'A': for i, char in enumerate(name): if char == 'A': check += 1 if check > max_a_len: max_a_len = check index = i else: check = 0 if ord(char) - ord('A') <= 13: answer += ord(char) - ord('A') else: answer += ord('Z') - ord(char) + 1 answer += min((2*(index-max_a_len)+len(name)-1-index),(2*(len(name)-1-index) + index-max_a_len), len(name)-1-check) return answer return 0 | cs |
문자열 자리를 이동하는 움직임 부분이 너무 난잡하다.
연속된 A가 가장 긴 부분을 기준으로 두고(max_a_len),
1. 시작점에서 max_a_len의 왼쪽 끝까지 갔다가 오른쪽 끝까지 가는 경우
2. 시작점에서 max_a_len의 오른쪽 끝까지 갔다가 왼쪽 끝까지 가는 경우
3. max_a_len과 관계 없이 시작점에서 A가 아닌 가장 끝까지 가는 경우
이 3가지의 경우 중 최솟값이 문자열 자리를 이동하는 움직임의 최솟값이다.
그리고 실행했더니 딱 2케이스가 실패했다.
왜인가 했더니 모든 문자열이 A인 경우, 0을 출력해야했다.
그런데 내가 작성한 코드는 -값이 출력이 됐다.
따라서 모든 문자열이 A인 경우엔 0을 출력하도록 수정하였다.
'python > 프로그래머스' 카테고리의 다른 글
python 2 x n 타일링 (0) | 2022.07.05 |
---|