| 문제 설명 ❓
문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return 하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해 보세요.
| 제한 사항 ❌
- 0 < A의 길이 = B의 길이 < 100
- A, B는 알파벳 소문자로 이루어져 있습니다.
| 입출력 예 💬
A | B | result |
"hello" | "ohell" | 1 |
"apple" | "elppa" | -1 |
"atat" | "tata" | 1 |
"abc" | "abc" | 0 |
| 입출력 예 설명 💬
입출력 예 #1
- "hello"를 오른쪽으로 한 칸 밀면 "ohell"가 됩니다.
입출력 예 #2
- "apple"은 몇 번을 밀어도 "elppa"가 될 수 없습니다.
입출력 예 #3
- "atat"는 오른쪽으로 한 칸, 세 칸을 밀면 "tata"가 되므로 최소 횟수인 1을 반환합니다.
입출력 예 #4
- "abc"는 밀지 않아도 "abc"이므로 0을 반환합니다.
| 풀이 🔥
⚠️ 한 번씩 읽어주세요 ⚠️
제 개인의 풀이 방법이며 틀린 풀이 방법 일수도, 더 나은 풀이법이 존재할 수도 있습니다!
전체 코드는 깃헙 링크 혹은 하단 접은 글을 펼쳐 확인가능하며, 복붙이 아닌 참고용 코드입니다
문자열 밀기 문제에 경우 문자열 내의 문자들이 오른쪽으로 한 칸씩 이동하는 느낌이라. 예전에 공부했던 쉬프르 연산자가 생각이 났었습니다. 하지만 좀 더 이해하기 쉬운 방법이 있을까 생각을 하던 중에 오른쪽으로 하나씩 미는 것이니 마지막 문자는 맨 앞으로 나머지 글자들은 그 뒤에 붙이는 생각이 떠올랐고, 그리고 예외 경우만 처리한다면 문제없이 동작할 것으로 예상하고 코드 작성을 진행하였습니다.
Ex) "ABCDEF" => "F" + "ABCDE" => "FABCDE"
[깃헙 / Github]
😻 댓글과 공감 한 번씩 감사드립니다 😻
| 전체 코드 🔎
더보기
using System;
public class Solution {
public int solution(string A, string B) {
int answer = 0;
// ShiftString에서 반환된 값을 제출
answer = ShiftString(A,B);
return answer;
}
public int ShiftString(string A, string B)
{
// A, B 문자열이 일치 할경우 0 리턴.
if(A == B)
return 0;
// 문자열의 길이 만큼 반복 수행
// Ex) "hello" => 5번 반복
for(int i = 0; i < A.Length; i++)
{
// Ex) "hello"
// a => A.Substring(A.Legnth-1,1) => "o"
// b => A.Substring(0,A.Lenth - 1) => "hell"
// a + b => "ohell"
A = A.Substring(A.Length - 1, 1) + A.Substring(0, A.Length - 1);
// 연산 결과가 일치 한다면 i+1를 리턴
if(A == B)
{
return i+1;
}
}
// 문자열의 길이 만큼 반복 하여도 일치 하지 않는 경우 -1 리턴
return -1;
}
}