제가 사용한 방법은 substring 함수를 사용하는 방법입니다!
substring은 시작점과 종착점 사이의 문자열을 리턴해주는 함수로 문자열.substring(시작점, 종착점) 으로 사용합니다.
이 함수에서 생각한 방법은
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
for(int i = 0; i<str2.length() - str1.length(); i++){
if(str2.substring(i, i + str1.length()).equals(str1)){
answer = 1;
break;
}
}
return answer;
}
}
이 방법입니다!
str2를 str1의 길이만큼 자른 문자열과 str1과 계속 비교를 하다 일치할 시에는 문자열이기 때문에 1을 리턴을 하는 방식입니다
첫 번째 고드실행은 무사히 통과했습니다!
하지만...
제출하고 체점하기에서는 테스트 1과 3에서 뭔가 오해가 있었나봅니다..
테스트케이스에 str1과 str2의 길이가 같은 경우를 넣어주니 실패가 생겨서 str1과 str2의 길이가 같은 경우를 해결해주었습니다!
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
int len = (str1.length() == str2.length()) ? 1 : str2.length() - str1.length();
for(int i = 0; i<len; i++){
if(str2.substring(i, i + str1.length()).equals(str1)){
answer = 1;
break;
}
}
return answer;
}
}
이렇게 하니 테스트 1은 통과했지만 테스트 3은 또 실패가 떴습니다...
그래서! 테스트케이스에 str1이 str2의 마지막에 있는 경우를 넣어주니 또 실패가 떴습니다
생각해보니 제 코드는 경우에 따라 끝까지 돌지 않는 경우도 있었습니다.
str1 = ae / str2 = abcae 와 같은 경우 len이 3이기 때문에
substring이 (0, 2) (1, 3) (2, 4) 까지만 돌고 (3, 5)인 경우는 해결해주지 않습니다
그래서 len에서 끝까지 문자열을 잘라주는 코드를 맨 위에 넣어줬습니다!
class Solution {
public int solution(String str1, String str2) {
int answer = 0;
int len = (str1.length() == str2.length()) ? 1 : str2.length() - str1.length();
if(str2.substring(len).equals(str1)) answer = 1;
for(int i = 0; i<len; i++){
if(str2.substring(i, i + str1.length()).equals(str1)){
answer = 1;
break;
}
}
return answer;
}
}
이렇게 하면~
통과입니다
하지만! 더 쉬운 방법이 있습니다 바로 contains 함수를 사용하는 것입니다.
class Solution {
public int solution(String str1, String str2) {
int answer = (str2.contains(str1)) ? 1 : 0;
return answer;
}
}
허헛 (⊙_⊙)?
그래도 두 가지 방법을 알았으니 괜찮습니다.. 네...................
그럼 20000~
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 접두사인지 확인하기 (0) | 2023.12.18 |
---|---|
프로그래머스 - 접미사인지 확인하기 (0) | 2023.12.18 |
프로그래머스 - 중앙값 구하기 (0) | 2023.10.05 |
프로그래머스 - 배열 두 배 만들기 (0) | 2023.08.24 |
프로그래머스 - 짝수의 합 (0) | 2023.08.02 |