ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • greedy
  • 스택/큐
  • 깃
  • React
  • HashMap
  • Arrays.sort()
  • git bash
  • Queue
  • 프로그래머스 Lv.2
  • BFS
  • 안드로이드
  • 프로그래머스
  • sort
  • getOrDefault
  • reactjs
  • DP
  • java
  • PriorityQueue
  • Comparator
  • dfs
  • 해시
  • git
  • compareTo()
  • entrySet
  • stack
  • Android
  • kotiln
  • 코틀린
  • 깃허브
  • 백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

[Java] 프로그래머스 Lv.2 > 조이스틱
Algorithm & Data Structure/프로그래머스

[Java] 프로그래머스 Lv.2 > 조이스틱

2022. 3. 6. 17:22

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

 

코딩테스트 연습 - 조이스틱

조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다

programmers.co.kr

풀이

조이스틱의 이동횟수만 구하면되기 때문에, 상하와 좌우 이동을 따로 계산한다.

상하이동은 A-Z의 알파벳이 총 26개로 이루어져있기 때문에 중간알파벳인 N을 기준으로 이동횟수를 더해주면 되었다.

N보다 작으면 A를 빼주고 N보다 크다면 Z에서 빼준뒤 1을 더해 계산한다.

좌우이동은 2가지를 고려해야한다.

  1. 계속 오른쪽으로 이동 : 이동횟수 = (문자열의 길이) - 1
  2. 오른쪽으로 가다가 A를 만날경우 왼쪽으로 이동 : 이동횟수 = (A만나기 전 오른쪽 이동횟수) + (왼쪽 이동횟수)

이 2가지 이동횟수를 비교해서 더 작은 쪽으로 이동한다.

주의할 점은 마지막까지 A만 있을 경우인데, 이 경우에는 다시왼쪽으로 돌아갈 필요가 없다는 점을 유의하자!

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++){
            // 상하이동
            if(name.charAt(i)<'N'){
                answer += name.charAt(i)-'A';
            }else{
                answer += 'Z' - name.charAt(i)+1;
            }
            
            // A의 마지막 위치구함
            int conA = i+1;
            while(conA <len && name.charAt(conA) =='A'){
                conA++;
            }
			// 좌우이동
            move = Math.min(move, i+(len-conA)+Math.min(i,len-conA));
        }
        
        return answer+move;
    }
}
저작자표시 (새창열림)

'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글

[Java] 프로그래머스 Lv2 : 프린터  (0) 2022.03.11
[Java] 프로그래머스 Lv.2 : 위장  (0) 2022.03.09
[Java] 프로그래머스 Lv2 > 삼각 달팽이  (0) 2022.03.06
[Java] 프로그래머스 Lv.2 > 전화번호 목록  (0) 2022.03.04
[Java] 프로그래머스 Lv.2 > 124 나라의 숫자  (0) 2022.03.04
    'Algorithm & Data Structure/프로그래머스' 카테고리의 다른 글
    • [Java] 프로그래머스 Lv2 : 프린터
    • [Java] 프로그래머스 Lv.2 : 위장
    • [Java] 프로그래머스 Lv2 > 삼각 달팽이
    • [Java] 프로그래머스 Lv.2 > 전화번호 목록
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바