코테/프로그래머스

[프로그래머스/Level2] 조이스틱 (JAVA)

imname1am 2024. 8. 11. 16:39
반응형

📖 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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

 

반응형