반응형
문제분석
조이스틱을 움직여서, 목표단어를 만드는데 움직이는 최소 횟수를 구하는 문제입니다.
이 문제를 풀기위해선 2개의 기능을 구현하셔야합니다.
1. 조이스틱을 위, 아래로 움직여서 문자를 바꾸고 횟수를 반환하는 메소드
2. 조이스틱을 오른쪽,왼쪽중 가장 짧은길을 골라 이동하는 횟수를 반환하는 기능
1번+2번을 하시면 우리가 원하는 답이 나올겁니다.
초기 문자열은 문자열 길이만큼 A가 부여되고시작됩니다.
1번을 구현하기위해선 Min('문자'-'A' ,26-'문자'-'A') 하셔도됩니다.
(26은 모든 영어문자갯수)
또는, 영어문자의 중간부분의 문자 'M'을 기준으로 연산을해도됩니다. 어찌댓든,
해당 문자를 만드는 최소한의 이동을 반환하면 됩니다.
2번을 구현하기위해선, <<왼쪽 이동과 오른쪽이동>> 중 어느쪽이
최소거리로 이동하는지를 확인해야합니다.
왼쪽이동과 오른쪽이동중 최소값을 구하는 로직은,
Min( i(오른쪽이동), len-next(왼쪽이동))를 구하고, i+(len-next)를 한번더 더해주면됩니다.
문제풀이
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
26
27
28
29
30
31
32
33
|
class Solution {
public int solution(String name) {
int answer = 0;
int len = name.length();
int min_move = len-1;
// 처음부터 끝까지 오른쪽으로 갈 때의 이동횟수
for(int i=0; i<len; ++i) {
// 1. 상하: A로 가는 가까운 길
// a ... l 'm' n ... z
if(name.charAt(i)<='M') {
answer += name.charAt(i)-'A';
}
else {
answer +='Z'-name.charAt(i)+1;
}
// 2. 좌우: 연속된 A의 등장에 따라 달라지는 최소 움직임
int next = i+1;
while(next<len && name.charAt(next)=='A') {
next++;
}
min_move = Math.min(min_move,i+len-next+Math.min(i,len-next));
}
answer += min_move;
return answer;
}
}
|
cs |
반응형
'알고리즘 > 프로그래머스 Level2' 카테고리의 다른 글
[프로그래머스,Java] Level2: 예상 대진표 (0) | 2021.12.01 |
---|---|
[프로그래머스,Java] Level2: 게임 맵 최단거리 (1) | 2021.11.24 |
[프로그래머스,Java] Level2:소수 찾기 (0) | 2021.11.16 |
[프로그래머스,Java] Level2:가장 큰 수 (0) | 2021.11.13 |
[프로그래머스,Java] Level2: 프린터 (0) | 2021.11.10 |