📖 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 풀이 방식
• 그리디
1. 커서를 상하로 이동하며 알파벳을 변경할 수 있는 최솟값을 구한다.
answer += Math.min(ch - 'A', 'Z' - ch + 1);
2. 연속된 알파벳 'A'가 끝나는 지점을 찾는다.
int idx = i+1;
while(idx < len && name.charAt(idx) == 'A') {
idx++;
}
3. 좌우 이동 최소 횟수를 구한다.
- (i*2) + len - idx
⇒ 오른쪽으로 갔다가 왼쪽으로 움직여 바꾸고 시작점으로 돌아간 후, 왼쪽으로 움직여 마지막 위치로 이동해서 바꾸는 경우
ㄴ (i*2) ⇒ 좌에서 우로 움직인 후, 다시 원점으로 돌아가는 횟수
- (len - next)*2 + i
⇒ 시작점에서 왼쪽으로 움직여 마지막 위치의 값을 바꾸고, 다시 오른쪽으로 움직여 시작점으로 돌아와 나머지를 바꾸는 것
🔺 코드
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
|
import java.util.*;
class Solution {
public int solution(String name) {
int answer = 0; // 조이스틱 조작 횟수
int len = name.length();
int move = len-1; // 기본 최소 좌우이동 횟수 (좌,우,커서)
// 해당 커서 알파벳 변경 최솟값 (위,아래,커서)
for(int i = 0 ; i < len ; i++) {
char ch = name.charAt(i);
answer += Math.min(ch - 'A', 'Z' - ch + 1);
// 연속된 'A'가 끝나는 지점 찾기
int idx = i+1;
while(idx < len && name.charAt(idx) == 'A') {
idx++;
}
// 좌우이동 최소 횟수 구하기
move = Math.min(move, i*2 + len - idx); // 순서대로 가기
move = Math.min(move, (len - idx)*2 + i); // 뒤로 돌아가기
}
return answer + move;
}
}
|
cs |
💦 어려웠던 점
- 좌우 인덱스 이동하는 부분의 구현이 헷갈렸다,,,
🧐 새로 알게 된 내용
- 좌우 인덱스 이동하는 부분 구현 방법,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[Java/자바] 프로그래머스 Lv2 - 조이스틱 (Greedy/탐욕법)
문제 설명 Solution.java 정답 코드 class Solution { public int solution(String name) { int answer = 0; // 조이스틱 조작 횟수 int len = name.length(); int move = name.length() - 1; // 기본 최소 좌우이동 횟수 (좌, 우 커서) // 해
hstory0208.tistory.com
[탐욕법(Greedy)] 조이스틱 - JAVA
https://programmers.co.kr/learn/courses/30/lessons/42860?language=java 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글
yummy0102.tistory.com
- 가장 이해가 잘 되었던 설명은 이 글
[프로그래머스] 조이스틱 자바
조이스틱 문제는 프로그래머스 코딩테스트 연습 Greedy에 있습니다.
velog.io
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level3] 자물쇠와 열쇠 (JAVA) (0) | 2024.08.27 |
---|---|
[프로그래머스/Level3] 다단계 칫솔 판매 (JAVA) (0) | 2024.08.11 |
[프로그래머스/Level3] 합승 택시 요금 (JAVA) (0) | 2024.08.01 |
[프로그래머스/Level2] 석유 시추 (JAVA) (0) | 2024.07.28 |
[프로그래머스/Level3] [1차] 셔틀버스 (JAVA) (0) | 2024.07.27 |