문제 소개
두 개의 문자열 'a'와 'b'가 주어졌을 때, 문자열 'a'를 시계 방향 또는 반시계 방향으로 정확히 두 자리 회전시켜 문자열 'b'를 얻을 수 있는지 확인하는 것이 이번 포스팅의 목표입니다. 먼저 예시를 통해 문제를 살펴보겠습니다.
입력 예시 1
a = google b = legoog
출력 −
True
설명 − 문자열 'google'을 반시계 방향으로 두 자리 회전하면 'legoog'가 됩니다. 따라서 True를 반환합니다.
입력 예시 2
a = tuorialst b = tutorials
출력 −
False
설명 − 문자열 'tuorialst'는 어떤 방향으로든 두 자리 회전해서 'tutorials'가 될 수 없습니다. 따라서 False를 반환합니다.
문제 해결 접근 방식
주어진 두 문자열에 대해 이 접근 방식에서는 두 가지 경우를 고려합니다.
- 반시계 방향 회전
- 시계 방향 회전
먼저 두 문자열의 길이가 다르면 false를 반환합니다. 그렇지 않고 두 문자열의 길이가 '2' 이하라면 True를 반환합니다.
그 외의 경우에는 문자열 'b'를 반시계 방향으로 두 자리 회전한 결과가 문자열 'a'와 일치하는지 확인하고, 일치하면 True를 반환하며 그렇지 않으면 False를 반환합니다.
마찬가지로 문자열 'b'를 시계 방향으로 두 자리 회전한 결과가 문자열 'a'와 일치한다면 True를 반환하고, 그렇지 않으면 false를 반환합니다.
알고리즘 단계
- 두 입력 문자열 'a'와 'b'를 받습니다.
- 불리언 함수 checkRotated(string a, string b)는 두 문자열을 인자로 받아 'b'를 반시계 또는 시계 방향으로 회전했을 때 두 문자열이 일치하는지 여부를 반환합니다.
- 문자열 'a'와 문자열 'b'의 길이를 확인합니다.
- 문자열 'b'를 반시계 방향으로 두 자리 회전한 부분 문자열을 구합니다.
- 결과 부분 문자열이 문자열 'a'와 같은지 검사하고, 같으면 true를 반환합니다.
- 문자열 'b'를 시계 방향으로 두 자리 회전한 부분 문자열을 구합니다.
- 결과 부분 문자열이 문자열 'a'와 같은지 검사하고, 같으면 true를 반환합니다.
- 어떤 조건도 만족하지 않으면 false를 반환합니다.
예제 코드
#include<bits/stdc++.h>
using namespace std;
bool checkRotated(string str1, string str2){
if (str1.length() != str2.length())
return false;
if(str1.length() <= 2 || str2.length() <= 2)
return (str1 == str2);
string s1= str2.substr(str2.size()-2, str2.size());
string s2= str2.substr(0,str2.size()-2);
string s3= s1+s2;
if(s3==str1)
return true;
string s4= str2.substr(2,str2.size());
string s5= str2.substr(0,2);
string s6= s4+s5;
if(s6==str1)
return true;
return false;
}
int main(){
string a= "google";
string b="legoog";
cout<<checkRotated(a,b)<<endl;
return 0;
}출력
위 코드를 실행하면 다음과 같은 출력이 나타납니다.
1
위 코드의 결과가 "True"이기 때문에 콘솔에는 '1'이 출력됩니다.