- Algorithm
- SingleProject
- Personal_Study
- C
- app
- Baekjoon
- Kubernetes
- c++
- Python
- pytorch
- 자격증
- study
- Univ._Study
- datastructure
- Artificial_Intelligence
- cloud_computing
- codingTest
- Java
- 2023_1st_Semester
- Operating_System
- Image_classification
- 오블완
- Database_Design
- 티스토리챌린지
- Linux
- Unix_System
- Android
- tensorflow
- programmers
- 리눅스마스터2급
코딩 기록 저장소
[프로그래머스/Python] 조이스틱 본문
문제 정보
제목 : 조이스틱
난이도 : Lv.2
사용 언어 : Python
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42860
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다.
ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA
조이스틱을 각 방향으로 움직이면 아래와 같습니다.
▲ - 다음 알파벳
▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로)
◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
▶ - 커서를 오른쪽으로 이동 (마지막 위치에서 오른쪽으로 이동하면 첫 번째 문자에 커서)
예를 들어 아래의 방법으로 "JAZ"를 만들 수 있습니다.
- 첫 번째 위치에서 조이스틱을 위로 9번 조작하여 J를 완성합니다.
- 조이스틱을 왼쪽으로 1번 조작하여 커서를 마지막 문자 위치로 이동시킵니다.
- 마지막 위치에서 조이스틱을 아래로 1번 조작하여 Z를 완성합니다.
따라서 11번 이동시켜 "JAZ"를 만들 수 있고, 이때가 최소 이동입니다.
만들고자 하는 이름 name이 매개변수로 주어질 때, 이름에 대해 조이스틱 조작 횟수의 최솟값을 return 하도록 solution 함수를 만드세요.
제한 사항
- name은 알파벳 대문자로만 이루어져 있습니다.
- name의 길이는 1 이상 20 이하입니다.
입출력 예
name | return |
"JEROEN" | 56 |
"JAN" | 23 |
입출력 예 설명
-
나의 풀이
enumerate() 함수를 이용해 for 루프를 반복합니다. 알파벳의 움직임 최소를 구하기 위해 n의 아스키 코드 - A의 아스키 코드와 Z의 아스키코드 - n의 아스키코드 + 1 둘 중 최소값을 answer에 추가합니다.
그다음 커서의 움직임 최소를 계산하기 위해 i에 1을 더한 nextI를 선언&초기화합니다. while루프를 이용해 만약 nextI가 name의 길이보다 작고 name[nextI]에 해당하는 알파벳이 A라면 nextI에 1을 추가합니다.
while 루프가 끝나면 i와 lenN - nextI 둘중 최소값을 구해 distance에 저장합니다. 커서이동의 최소값을 구하기 위해 minCursor와 (lenN - nextI) + distance 비교해 최소값을 minCursor에 저장해두고 반복이 끝나면 minCursor을 추가한 후 return합니다.
코드
def solution(name):
answer = 0
lenN = len(name)
minCursor = lenN - 1
for i,n in enumerate(name):
# 알파벳 움직임 최소 계산
answer += min(ord(n) - ord('A'),ord('Z')-ord(n)+1)
# 커서 움직임 최소 계산
nextI = i + 1
while(nextI < lenN and name[nextI] == "A") :
nextI += 1
distance = min(i, lenN - nextI)
minCursor = min(minCursor, i+ (lenN - nextI) + distance )
answer += minCursor
return answer
'프로그래머스 > Lv.2' 카테고리의 다른 글
[프로그래머스/Python] 양궁대회 (0) | 2024.03.18 |
---|---|
[프로그래머스/Python] 요격 시스템 (0) | 2024.03.17 |
[프로그래머스/Python] 숫자 블록 (0) | 2024.03.16 |
[프로그래머스/Python] 혼자서 하는 틱택토 (0) | 2024.03.16 |
[프로그래머스/Python] 이모티콘 할인행사 (0) | 2024.03.15 |