python/프로그래머스

프로그래머스 Lv2 조이스틱

kjh42447 2022. 7. 4. 21:59

분류에 그리드 알고리즘으로 되어있어서 그리드로 접근했었지만,

추가된 테스트케이스에서 그리드로 풀리지 않는 케이스들이 추가된것으로 보였다.

 

따라서 "알파벳을 바꾸는 움직임 + 문자열 자리를 이동하는 움직임"의 최솟값을 구하는 방법으로 바꾸었다.

 

 

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