PS

프로그래머스 - 조이스틱

728x90

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

 

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

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

programmers.co.kr

 

1. 입력 글자 길이 n 만큼의 크기의 문자열을 전부 'A' 가 들어가게 생성한다

2. 입력 글자와 'A' 로 만 구성된 글자가 같을 때 까지 다음의 반복문을 돌린다

   - 1) 문자 변경

   : 문자 변경시에 이동 횟수를 최소화 해야하므로

     현재 알파벳 - 'A' 의 거리(up_len, 조이스틱 윗쪽 방향), 'Z' + 1 - 현재 알파벳 의 거리 (down_len, 조이스틱 아랫방향) 중 작은 값을 찾는다

     그 작은값을 answer 에 추가해주고, 해당 커서의 문자를 바꾼다

 

   - 2) 커서 이동

   : 좌측 이동 과 우측 이동을 나눠서 하며, 이동하면서 커서를 옮길때 마다 카운팅 하고, 커서를 옮긴 지점의 글자가 다르면 이동을 멈춘다

     그리고 둘 중 더 적게 이동한 쪽을 채택해서 answer 에 더한다.

 

 

- c++

 

#include <bits/stdc++.h>
 
using namespace std;
 
int solution(string name) {
    int answer = 0, len = name.length(), cursor = 0;
    string init_str(len, 'A');
    
    while(1) {
        if (init_str[cursor] != name[cursor]) {
            int up_len = name[cursor] - 'A', down_len = 'Z' + 1 - name[cursor], min_num;
            min_num = min(up_len, down_len);
            answer += min_num;
            init_str[cursor] = name[cursor];
        }
        
        if (init_str == name) break;
        
        int left_len = 0, right_len = 0, left_idx = cursor, right_idx = cursor;
        // move left
        while(1) {
            left_idx--;
            left_len++;
            if (left_idx < 0) left_idx = len - 1;
            if (init_str[left_idx] != name[left_idx]) break;
        }
        
        // move right
        while(1) {
            right_idx++;
            right_len++;
            if (right_idx >= len) right_idx = 0;
            if (init_str[right_idx] != name[right_idx]) break;
        }
        
        if (left_len >= right_len) {
            cursor = right_idx;
            answer += right_len;
        } else if (left_len < right_len) {
            cursor = left_idx;
            answer += left_len;
        } 
    }
    
    return answer;
}
cs

 

 

 

 

728x90

'PS' 카테고리의 다른 글

SWEA 2819 - 격자판의 숫자 이어 붙이기  (0) 2020.11.21
SWEA 1206 - View  (0) 2020.11.21
프로그래머스 - 큰 수 만들기  (0) 2020.11.19
프로그래머스 - 카카오프렌즈 컬러링북  (0) 2020.11.19
프로그래머스 - 프린터  (0) 2020.11.19