Today I Learend

최지웅·2024년 2월 4일
0

Today I Learned

목록 보기
96/238

오늘 할일
1. LeetCode
2. 여행일정수정
3. 교육봉사
4. 창엔 회의

오늘 한일
1. LeetCode

    1. Maximum Number of Vowels in a Substring of Given Length는 문자열에서 k길이의 서브문자열에 모음이 몇번 등장하는지 찾고 그 최댓값을 리턴하는 문제이다. 문자열을 chararray로 변환하고 모음이 들어가는지를 indexOf()로 확인하는 방식으로 접근해보았다.
class Solution {
    public int maxVowels(String s, int k) {
        String vowels="aeiou";
        char[] string=s.toCharArray();
        int size=string.length;
        int count=0;
        int max=0;

        for(int i=0; i<size-k+1; i++){
            count=0;
            for(int j=0; j<k; j++){
                if(vowels.indexOf(string[i+j])!=-1){
                    count++;
                }
            }
            if(count>max) {
                max = count;
            }
        }
        return max;
    }
}


굉장히 순조로울 것으로 예상된다. 거의 마지막 테스트케이스에서 Time Limit Exceeded가 발생했다. 최적화를 생각해보자.

모음이 시작부분에 등장하는 문자열만 계산하도록 코드를 수정해보았다.

public int maxVowels(String s, int k) {
        String vowels="aeiou";
        char[] string=s.toCharArray();
        int size=string.length;
        int count=0;
        int max=0;

        for(int i=0; i<size-k+1; i++){
            if(i<size-k && vowels.indexOf(s.charAt(i))==-1)
                continue;
            count=0;
            for(int j=0; j<k; j++){
                if(vowels.indexOf(string[i+j])!=-1){
                    count++;
                }
            }
            if(count>max) {
                max = count;
            }
        }
        return max;
    }


테스트 케이스가 하나 넘어갔다.

다음으로 시도한 방법은 중첩 for문을 substring하고 filter로 모음이 포함된 경우를 count하게 작성해보았다.

    public int maxVowels(String s, int k) {
        String vowels="aeiou";
        char[] string=s.toCharArray();
        int size=string.length;
        int count=0;
        int max=0;

        for(int i=0; i<size-k+1; i++){
            if(i<size-k && vowels.indexOf(s.charAt(i))==-1)
                continue;
            count=(int) s.substring(i,i+k)
                    .chars()
                    .filter(c->vowels.indexOf(c)!=-1)
                    .count();
            if(count>max) {
                max = count;
            }
        }
        return max;
    }

하지만 테스트 케이스 102번에서 통과하지 못했다. 기존의 코드로 회귀해보자.

profile
이제 3학년..

0개의 댓글