선발대

[스파르타] 99클럽 2기 코테스터디 16일차 TIL / 조이스틱 본문

스파르타코딩클럽/활동 내용

[스파르타] 99클럽 2기 코테스터디 16일차 TIL / 조이스틱

신선한 스타트 2024. 6. 4. 16:31

프로그래머스: 조이스틱 (링크)

조이스틱

 

상하 이동은 아스키 코드 계산해서 구했는데 좌우 이동을 어떻게 구해야 할지 감이 잘 잡히지 않았다.

처음에 참고했던 블로그에서는 좌우 이동을 아래 2가지 중의 최솟값을 구하는 방식으로 구했었다.

 

(1) 왼쪽에서 오른쪽으로 직선 이동 ( = 전체 길이 - 1)

(2) 왼쪽부터 시작해서 A 만나면 다시 돌아가고 오른쪽부터 시작

 

그런데 이렇게 제출해보니 몇 개의 테스트를 통과하지 못했고, 다른 풀이도 찾아보니 오른쪽에서 시작하는 경우를 제외했었다는 것을 알게 되었다. 그래서 아래의 3가지 경우에서 좌우 이동의 최솟값을 찾아야 한다.

 

(1) 왼쪽에서 오른쪽으로 직선 이동 ( = 전체 길이 - 1)

(2) 왼쪽부터 시작해서 A 만나면 다시 돌아가고 오른쪽부터 시작

(3) 오른쪽부터 시작해서 A 만나면 다시 돌아가고 왼쪽부터 시작 (이 부분 추가!)

 

def solution(name):
    ans = 0
    min_move = len(name) - 1
    next = 0
    
    # 예외처리: 제일 마지막에 'A'로 끝나는 경우
    while name[min_move] == 'A' and min_move > 0:
        min_move -= 1
    
    # 예외처리: name = 'A' 이었던 경우 바로 리턴
    if (min_move < 0):
        return answer
        
    for i, char in enumerate(name):
        # 상하 이동
        ans += min(ord(char) - ord('A'), ord('Z') - ord(char) + 1)
        
        # 좌우 이동
        next = i + 1 # A가 나오는 마지막 인덱스
        while next < len(name) and name[next] == 'A':
            next += 1
        
        # 좌우 이동 최솟값
        min_move = min(min_move, 2*i+len(name)-next, i+2*(len(name)-next))
    ans += min_move
    return ans

오늘의 미들러 풀이 끝!


참고한 블로그: https://bellog.tistory.com/152

 

[프로그래머스] 조이스틱 - Python

코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직

bellog.tistory.com

참고한 블로그: https://aiday.tistory.com/120

 

[Python] 프로그래머스, 조이스틱 Lv.2 (feat.greedy, Brute Force, 그리디, 완전탐색, 파이썬)

조이스틱 문제 링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. pr

aiday.tistory.com

 

Comments