본문 바로가기

c++/프로그래머스

프로그래머스 : 조이스틱 c++

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

 

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

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

programmers.co.kr

 

풀이

1. 기본 틀은 A로 이루어져 있다.

-> 그래서 name의 길이랑 동일한 string을 data라는 이름으로 생성

 

2. 문자를 바꿀 수 있는것은 하나씩이므로

 현재위치에 문자 수정 -> 다른 칸으로 이동 -> 그 칸 수정 -> 반복

 

3. 여기서 중요한건, 한칸을 수정한 후, 오른쪽으로 갈지, 왼쪽으로 갈지를 정해야 한다.

-> 이거를 하기 위해서 left, right 라는 포인터를 만들어서 비교.

 

4. 해당 칸으로 이동 후, 루프 반복

 

※ name을 AAAAA인 data로 바꾸는것임

 

#include <string>
#include <vector>

using namespace std;

int solution(string name) {
    int answer = 0;
    string data="";
    
    for(int i=0;i<name.size();i++)
    {
        data += 'A';
    }
    
    int index =0;
    
    while(name != data)
    {
        //지금 위치 변경
        answer += min(name[index]-'A','Z'-name[index]+1);
        name[index] ='A';
        
        //왼쪽, 오른쪽으로 중 어디로 가야 빠를지 정하기
        for(int i=1;i<=name.size()/2;i++)
        {
            int left = index-i;
            if(left<0)
                left += name.size();
            
            int right = index+i;
            if(right>=name.size())
                right -= name.size();
            
            if(name[left] !='A')
            {
                index = left;
                answer +=i;
                break;
            }
            else if(name[right] !='A')
            {
                index = right;
                answer +=i;
                break;
            }
        }
    }
    
    return answer;
}