Skip to content

Commit 8087d1d

Browse files
committed
[level 2] Title: 조이스틱, Time: 17.02 ms, Memory: 88.2 MB -BaekjoonHub
1 parent b2b1647 commit 8087d1d

2 files changed

Lines changed: 112 additions & 0 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# [level 2] 조이스틱 - 42860
2+
3+
[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/42860#qna)
4+
5+
### 성능 요약
6+
7+
메모리: 88.2 MB, 시간: 17.02 ms
8+
9+
### 구분
10+
11+
코딩테스트 연습 > 탐욕법(Greedy)
12+
13+
### 채점결과
14+
15+
정확성: 100.0<br/>합계: 100.0 / 100.0
16+
17+
### 제출 일자
18+
19+
2025년 05월 06일 11:24:44
20+
21+
### 문제 설명
22+
23+
<p>조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다.<br>
24+
ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA</p>
25+
26+
<p>조이스틱을 각 방향으로 움직이면 아래와 같습니다.</p>
27+
<div class="highlight"><pre class="codehilite"><code>▲ - 다음 알파벳
28+
▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로)
29+
◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
30+
▶ - 커서를 오른쪽으로 이동 (마지막 위치에서 오른쪽으로 이동하면 첫 번째 문자에 커서)
31+
</code></pre></div>
32+
<p>예를 들어 아래의 방법으로 "JAZ"를 만들 수 있습니다.</p>
33+
<div class="highlight"><pre class="codehilite"><code>- 첫 번째 위치에서 조이스틱을 위로 9번 조작하여 J를 완성합니다.
34+
- 조이스틱을 왼쪽으로 1번 조작하여 커서를 마지막 문자 위치로 이동시킵니다.
35+
- 마지막 위치에서 조이스틱을 아래로 1번 조작하여 Z를 완성합니다.
36+
따라서 11번 이동시켜 "JAZ"를 만들 수 있고, 이때가 최소 이동입니다.
37+
</code></pre></div>
38+
<p>만들고자 하는 이름 name이 매개변수로 주어질 때, 이름에 대해 조이스틱 조작 횟수의 최솟값을 return 하도록 solution 함수를 만드세요.</p>
39+
40+
<h5>제한 사항</h5>
41+
42+
<ul>
43+
<li>name은 알파벳 대문자로만 이루어져 있습니다.</li>
44+
<li>name의 길이는 1 이상 20 이하입니다.</li>
45+
</ul>
46+
47+
<h5>입출력 예</h5>
48+
<table class="table">
49+
<thead><tr>
50+
<th>name</th>
51+
<th>return</th>
52+
</tr>
53+
</thead>
54+
<tbody><tr>
55+
<td>"JEROEN"</td>
56+
<td>56</td>
57+
</tr>
58+
<tr>
59+
<td>"JAN"</td>
60+
<td>23</td>
61+
</tr>
62+
</tbody>
63+
</table>
64+
<p><a href="https://commissies.ch.tudelft.nl/chipcie/archief/2010/nwerc/nwerc2010.pdf" target="_blank" rel="noopener">출처</a></p>
65+
66+
<p>※ 공지 - 2019년 2월 28일 테스트케이스가 추가되었습니다.<br>
67+
※ 공지 - 2022년 1월 14일 지문 수정 및 테스트케이스가 추가되었습니다. 이로 인해 이전에 통과하던 코드가 더 이상 통과하지 않을 수 있습니다.</p>
68+
69+
70+
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public int solution(String name) {
5+
char[] names = name.toCharArray();
6+
7+
return changeA(names) + moveRL(names);
8+
}
9+
10+
int changeA(char[] name){
11+
int answer = 0;
12+
13+
for(char now : name){
14+
if(13 < now - 'A') answer += ('Z' - now + 1);
15+
else answer += (now - 'A');
16+
}
17+
System.out.println(answer);
18+
return answer;
19+
}
20+
21+
int moveRL(char[] name){
22+
int acnt, n, answer;
23+
n = name.length;
24+
answer = n - 1;
25+
26+
for(int i = 0; i < n; i++){
27+
28+
for(acnt = i + 1; acnt < n; acnt++){
29+
if(name[acnt] != 'A') break;
30+
}
31+
32+
// 마지막 문자 ~ i까지 왼쪽으로 이동한뒤, 오른쪽으로 방향 전환해서 움직인 횟수
33+
answer = Math.min((n - acnt) * 2 + i, answer);
34+
// 첫 문자 ~ i까지 오른쪽으로 이동한 뒤,왼쪽을 방향 전환해서 움진인 횟수
35+
answer = Math.min(i * 2 + n - acnt, answer);
36+
37+
System.out.println(i + " " + name[i] + " " + (i * 2 + n - acnt) + " vs " + ((n - acnt) * 2 + i));
38+
}
39+
System.out.println(answer);
40+
return answer;
41+
}
42+
}

0 commit comments

Comments
 (0)