[프로그래머스 알고리즘 고득점 Kit][그리디][Java] 조이스틱

2026. 8. 2. 11:56·알고리즘 & 자료구조/문제 풀이

https://school.programmers.co.kr/learn/courses/30/lessons/42860

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

1. 각 글자의 위 아래를 먼저 구한다. -> 이건 위나 아래를 눌러서 비교함

2.  좌우 움직임 최소를 구한다.

 1) A구간을 최대한 피하는게 이득

 2) A구간이 2개이상이라면 구간 사이 처리해야할 글자가 생기기에 지나가야할 A구간은 무조건 생김
 3) 그러면 최소 하나의 A구간은 피해도 됨
 4) 피하지 않고 그냥 직진하는게 이득일 수도 있음
 5) 직진하는 값과 피하는 것을 비교후 최소값을 구함
 6) 피하는 것은 시작점을 기준으로 오른쪽으로 갔다가 왼쪽으로 돌아가는 경우
 7) 왼쪽으로 갔다가 오른쪽으로 돌아가는 경우가 있음
 8) A구간을 구하려고 보니 전체 문자열이 20이기에 그냥 모든 인덱스에 대해서 멈출 곳(A구간의 끝)만 찾아서 비교함

 

import java.util.*;

class Solution {
    public int solution(String name) {
        int answer = 0;
        int len = name.length();
        for(int i=0; i<len; i++) {
            char c = name.charAt(i);
            int cnt = Math.min(c - 'A', 26 - (c - 'A'));
            answer += cnt;
        }
        
        //그냥 오른쪽으로만 가거나
        int min = len - 1;
        //하나의 A구간을 피해가거나 -> A구간이 2개 이상이라면 구간 사이 처리해야할 이름이 있기에 하나 이상은 지날 수 밖에 없음
        //그래서 하나의 구간만 피하고 나머지는 지나는 경우 -> 이 말은 돌아가야하는 경우 -> 오른쪽으로 갔다가 왼쪽으로 가는 경우 또는 왼쪽으로 갔다가 오른쪽으로 가는 경우
        //i 는 내가 멈출 곳, cursor 는 A구간의 끝이라 멈출 곳

        // -> i를 0에서 len-1까지 다 보는 이유? -> 사실 모든 A구간의 시작과 끝을 찾아서 그 값으로 비교하는 게 맞지만 
        //길이가 짧기 때문에 그냥 모든 인덱스에 대해서 멈출 A구간(cursor)만 찾아서 값 비교.
        for(int i=0; i<len; i++) {
            int cursor = i+1;
            
            //A 구간의 끝. 멈출 곳 찾기
            while(cursor < len && name.charAt(cursor) == 'A') {
                cursor += 1;
            }
            
            int rightFirst = i * 2 + len - cursor; 
            // 0----->i
            // 0<-----i
            //         AAAAAA cursor<----len
            int leftFirst = (len - cursor) * 2 + i;
            //         AAAAAAcursor<-----len
            //         AAAAAAcursor----->len
            // 0----->i
            
            min = Math.min(min, rightFirst);
            min = Math.min(min, leftFirst);
        } 
        answer += min;
        
        return answer;
    }
   
   
}

저작자표시 비영리 변경금지 (새창열림)

'알고리즘 & 자료구조 > 문제 풀이' 카테고리의 다른 글

[프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 주식가격  (0) 2026.07.29
[프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 다리를 지나는 트럭  (0) 2026.07.29
[프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 모음사전  (0) 2026.07.27
[프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 전력망을 둘로 나누기  (0) 2026.07.25
[프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 피로도  (0) 2026.07.12
'알고리즘 & 자료구조/문제 풀이' 카테고리의 다른 글
  • [프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 주식가격
  • [프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 다리를 지나는 트럭
  • [프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 모음사전
  • [프로그래머스 알고리즘 고득점 Kit][완전탐색][Java] 전력망을 둘로 나누기
수수다
수수다
우하하
  • 수수다
    그냥살자
    수수다
  • 전체
    오늘
    어제
    • 분류 전체보기 (84) N
      • 프로젝트 (1)
      • 알고리즘 & 자료구조 (45) N
        • 내용 정리 (2)
        • 문제 풀이 (43) N
      • 데이터베이스 (34) N
        • 내용 정리 (1)
        • 문제 풀이 (33) N
      • CS (2)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 네이버 블로그
  • 공지사항

  • 인기 글

  • 태그

    AVG
    완전탐색
    date_format
    분리집합
    mysql
    해시
    알고리즘
    SQL
    SUBSTR
    유니온파인드
    Round
    Java
    정렬
    코테
    bfs
    like
    IFNULL
    그래프
    깊이/너비 우선 탐색(DFS/BFS)
    coalesce
    백트래킹
    프로그래머스 알고리즘 고득점 kit
    DP
    이분탐색
    코딭테스트
    코딩테스트
    동적계획법
    프로그래머스
    dfs
    Stack
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
수수다
[프로그래머스 알고리즘 고득점 Kit][그리디][Java] 조이스틱
상단으로

티스토리툴바