알고리즘/프로그래머스 1단계

프로그래머스 - 문자열 밀기 - C++

게임만드는학생 2023. 9. 5. 10:15

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

int solution(string A, string B) {
    int answer = 0;
    
    for(answer=0;;answer++)
    {
        if(answer>A.length())return -1;
        if(A==B)
            break;
        char c = A[A.length()-1];
        for(int j=A.length()-1;j>=1;j--)
            A[j]=A[j-1];
        A[0]=c;
    }
    
    return answer;
}

 

설명

문자열을 1칸씩 오른쪽으로 밀며 A와 B가 같은지 확인하고 몇번을 밀어야하는지를 리턴하는 문제이다. 

 

for문에서 예외로 민 횟수가 문자열의 길이를 넘어서면 두 문자열은 같아질 수 없으므로 -1을 리턴한다.

 

그리고 A와 B가 같은지 체크하고 다르다면 오른쪽으로 A를 민다.

 

char c = A[A.length()-1];
        for(int j=A.length()-1;j>=1;j--)
            A[j]=A[j-1];
        A[0]=c;

A 문자열을 오른쪽으로 미는 코드이다. 

가장 오른쪽 문자 즉, 마지막 문자는 사라지기 때문에 c에 저장해놓는다. 

그리고 A[0] 은 A[1] 에 A[1] 은 A[2] 에 넣으면 되는데 이를 마지막부터 해야 문자가 사라지는 것을 방지할 수 있다. 

ex) 0부터 시작하면 A[0] = A[1] 을 하는 순간 A[1] 데이터가 지워진다.

따라서 A[2] = A[1] , A[1] = A[0] 순으로 해야한다. 

마지막에 A[0] 에 저장해놓았던 마지막 문자를 대입한다.