두 개의 문자열 s와 t, 그리고 결과 문자열 r이 주어졌을 때, r이 s + t 또는 t + s로 만들어질 수 있는지 확인하는 문제를 살펴보겠습니다. 여기서 +는 문자열 연결(concatenation)을 의미합니다.
예를 들어, 입력이 s = "world", t = "hello", r = "helloworld"라면 출력은 True가 됩니다. 왜냐하면 "helloworld"(r)는 "hello"(t)와 "world"(s)를 연결한 것과 같기 때문입니다.
해결 접근 방법
이 문제는 다음 단계를 통해 해결할 수 있습니다.
- 먼저
r의 길이가s와t의 길이 합과 같은지 확인합니다. 다르면 즉시 False를 반환합니다. r이s로 시작하고t로 끝난다면 True를 반환합니다.r이t로 시작하고s로 끝난다면 True를 반환합니다.- 위 조건 중 어느 것도 만족하지 않으면 False를 반환합니다.
길이 검사를 먼저 수행하면 불필요한 문자열 비교 연산을 줄일 수 있어 효율적입니다. Python의 내장 메서드인 startswith()와 endswith()를 활용하면 코드를 간결하게 작성할 수 있습니다.
예제 코드
def solve(s, t, r):
if len(r) != len(s) + len(t):
return False
if r.startswith(s):
if r.endswith(t):
return True
if r.startswith(t):
if r.endswith(s):
return True
return False
s = "world"
t = "hello"
r = "helloworld"
print(solve(s, t, r))입력
"world", "hello", "helloworld"
출력
True
코드 설명
위 코드에서 solve() 함수는 세 개의 문자열을 매개변수로 받습니다. 첫 번째 조건문에서 r의 길이가 s와 t 길이의 합과 일치하는지 검사하여, 일치하지 않으면 더 이상 비교할 필요 없이 False를 반환합니다. 이후 startswith()와 endswith() 메서드를 사용해 두 가지 연결 순서(s + t와 t + s)를 모두 확인합니다. 시간 복잡도는 O(n)이며, n은 문자열 r의 길이입니다.