코딩테스트

프로그래머스 - 부분 문자열

오쟝 2023. 12. 18. 08:18

 

제가 사용한 방법은 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~