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;
}
'c++ > 프로그래머스' 카테고리의 다른 글
프로그래머스 : N으로 표현 c++ (0) | 2021.06.21 |
---|---|
프로그래머스 : 큰 수 만들기 c++ (0) | 2021.06.20 |
프로그래머스 : 위장 C++ (0) | 2021.06.19 |
프로그래머스 : 전화번호 목록 C++ (0) | 2021.06.19 |
프로그래머스 : 이중우선순위 큐 C++ (0) | 2020.11.19 |