본문 바로가기
Develop/프로그래머스 (Cpp)

[프로그래머스] 문자열 밀기 (C++)

by Tarra 2023. 2. 25.

문자열 밀기 / Lv.0


문제  설명 )

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

 

 

 

제한 사항 )

  • 0 < A의 길이 = B의 길이 < 100
  • A, B는 알파벳 소문자로 이루어져 있습니다.

 

 

 

입출력 예 )

 

 

 

입출력 예 설명 )

입출력 예 #1

  • "hello"를 오른쪽으로 한 칸 밀면 "ohell"가 됩니다.

입출력 예 #2

  • "apple"은 몇 번을 밀어도 "elppa"가 될 수 없습니다.

입출력 예 #3

  • "atat"는 오른쪽으로 한 칸, 세 칸을 밀면 "tata"가 되므로 최소 횟수인 1을 반환합니다.

입출력 예 #4

  • "abc"는 밀지 않아도 "abc"이므로 0을 반환합니다.

 

 

 

풀이)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <string>
#include <vector>
 
using namespace std;
 
int solution(string A, string B) {
    int answer = 0;
    bool flag = 0;
    
    // A와 B가 같은 경우
    if (A == B)
    {
        answer = 0;
    }
    // A와 B가 같지 않은 경우
    else  
    {
     
        // temp에 A를 2개 연결한다.
        // hellohello
        string temp = A + A;
        // 해당 temp를 확인하여 B가 있는지를 체크
        int len = A.length();
        int count = 0;
        for(int i = len; i > 0; i--)
        {
            // string STL의 substr을 사용하여 
            // string을 잘라 B와 비교한다
            if(temp.substr(i, len) == B)
            {
                flag = 1;
                answer = count;
                break;
            }
            count++;
        }
 
        if (!flag)
        {
            answer = -1;
        }
    }
    
    return answer;
}
cs

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

 

프로그래머스

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

programmers.co.kr