📌 문제 링크 :
https://leetcode.com/problems/is-subsequence/description/
✅ 내 풀이(Success) :
public class Solution {
public boolean isSubsequence(String s, String t) {
int length1 = s.length(), length2 = t.length();
int p1 = 0;
if (length1 == 0) {
return true;
}
for (int p2 = 0; p2 < length2; p2++) {
if (p1 < length1 && s.charAt(p1) == t.charAt(p2)) {
p1++;
}
}
return p1 == length1;
}
}
🔨 리팩토링 :
class Solution {
public boolean isSubsequence(String s, String t) {
int p1 = 0, p2 = 0;
int n1 = s.length(), n2 = t.length();
while (p1 < n1 && p2 < n2) {
if (s.charAt(p1) == t.charAt(p2)) {
p1++;
}
p2++;
}
return p1 == n1;
}
}
🧐 Review :
문자열 s가 문자열 t의 서브시퀀스(부분수열)인지 체크하는 문제이다.
투 포인터를 사용해서 문자열의 s와 t의 첫 번째 인덱스부터 시작해서 동일한 문자가 존재한다면, 포인터 p1을 증가시킨다.
반복문이 종료됐을 때, 포인터 p1이 문자열 s의 길이와 같다면, 문자열 t의 서브시퀀스인 것이 맞다는 것을 확인할 수 있다.
위 아이디어만 고려한 풀이를 제출했을 때, 특정 테스트 케이스에서 런타임 에러가 발생했다.
문제에서 주어진 것 처럼 문자열 s와 t는 빈 문자열(길이가 0)이 입력으로 들어올 수 있다.
문자열 s가 빈 문자열이라면, 문자열 t가 어떤 문자열이든 서브시퀀스가 만족되므로, 해당 케이스를 커버하기 위해 조건문을 추가했다.
또한, 문자열 t의 포인터가 마지막까지 도착하기 전에 이미 문자열 s가 서브시퀀스인 것이 확인된 경우도 존재하므로,
해당 케이스를 위해 for 반복문 안에 if문에 조건문을 수정했고, 이렇게 수정했을 때 문제를 해결 할 수 있었다.
문제를 해결하고 GPT에게 코드 리팩토링을 요청했고, 위에 첨부한 풀이가 리팩토링한 코드이다.
내가 작성한 코드보다 조건문 분기의 처리에서 좀 더 깔끔하다는 생각이 들었다.
'알고리즘 문제 풀이: 자바 > LeetCode' 카테고리의 다른 글
| 1732. Find the Highest Altitude (0) | 2025.11.01 |
|---|---|
| 2215. Find the Difference of Two Arrays (0) | 2025.10.31 |
| 643. Maximum Average Subarray I (0) | 2025.10.30 |
| 1071. Greatest Common Divisor of Strings (0) | 2025.10.29 |
| 1768. Merge Strings Alternately (0) | 2025.10.28 |
댓글