조이스틱
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 사이트에 그리디 문제로 나와있지만 테스트케이스 추가 후 그리디 방식으로는 해결 X
- → 완전 탐색 방식 사용
참고 사이트: https://kjhoon0330.tistory.com/entry/프로그래머스-조이스틱-Python
- 다른 사람 풀이 (# 완전 탐색)
- 가야할 곳은 'A'가 아닌 곳입니다.
- 따라서 'A'가 아닌 곳의 인덱스를 전부 찾은 뒤(시작 위치 제외) 해당 인덱스들을 모두 방문하는 모든 경우의 수, 즉 순열을 구합니다.
- 각 순열에 따른 이동 거리를 구해보고 이를 가지고 정답을 갱신합니다.
- 모든 순열 중 최소 이동 거리가 나온 것이 문제에서 요구한 정답이 됩니다.
- ord(문자) : 문자 → 10진수
- ord('Z') -ord(alp) +1 : Z에 가까운 경우 A까지의 거리를 위해 Z에서 뺀 후 +1
- ord(alp) - ord('A) : A에 가까운경우
- min() 함수로 그 중 작은 값 판별
from itertools import permutations as p
INF = int(1e9)
# 알파벳이 주어졌을 때 상하로 움직이는 횟수 구하는 함수
def countChange(alp):
return min(ord('Z') - ord(alp) + 1, ord(alp) - ord('A'))
# 왼쪽, 오른쪽 중 최단으로 가는 거리 구하는 함수
def findShortestPath(name, now, next):
right, left = max(next, now), min(next, now)
rightDist = right - left
leftDist = left + len(name) - right
return min(rightDist, leftDist)
def solution(name):
answer = INF
# "A" 가 아니라서 가야하는 위치(시작 위치 제외)
toGoPlaces = [i for i in range(len(name)) if name[i] != "A" and i != 0]
# 알파벳을 바꾸느라 생기는 이동
changeCount = 0
for c in name:
changeCount += countChange(c);
# 움직일 수 있는 모든 케이스
cases = p(toGoPlaces, len(toGoPlaces))
for case in cases:
now = 0
result = 0
for next in case:
dist = findShortestPath(name, now, next)
result += dist
now = next
answer = min(answer, result + changeCount)
return answer
- 다른 방법
- 리스트가 아닌 경우: list(reversed(~))
- reversed( 튜플, 리스트, 문자열 ) 후에는 list() 를 써줘야함
- reverse() 같은 경우는 리스트만 사용 가능 : list.reverse()
- 리스트가 아닌 경우: list(reversed(~))
#알파벳 찾아 상하로 움직이는 횟수
def countChange(alp):
return min(alpha.index(alp), list(reversed(alpha)).index(alp)+1)
- list[::-1]
- 마지막부터 처음까지 -1하면서 역순 배열
#알파벳 찾아 상하로 움직이는 횟수
def countChange(alp):
return min(alpha.index(alp), list(alpha)[::-1].index(alp)+1)'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] [Level 2] [완전 탐색] [중복 순열] 모음 사전 (0) | 2022.08.22 |
|---|---|
| [프로그래머스] [Level 2] [완전탐색] 전력망을 둘로 나누기 (0) | 2022.08.21 |
| [프로그래머스] [Level 2] [완전탐색] 피로도 (0) | 2022.08.12 |
| [프로그래머스] [Level 2] [완전탐색] 소수 찾기 (0) | 2022.07.28 |
| [프로그래머스] [Level 2] [Heap] 더 맵게 (0) | 2022.07.26 |