Today I Learned

최지웅·2024년 1월 22일
0

Today I Learned

목록 보기
89/238

오늘한일
1. LeetCode

    1. Is Subsequence문제는 문자열 s가 문자열 t의 하위문자열인지 판단하는 문제이다. 이때 일반적인 substring과 달리 띄어쓰기와 상관없이 순서만 유지되면 substring으로 판단한다. 접근은 문자열 t를 순회하며 s가 순서대로 나오는지를 two pointer로 해결하려 하였고, 디버깅 과정에서 빈 문자열이 입력된 경우와 문자열 t를 순회하는 for문의 조건에 two pointer의 범위조건을 추가하여 해결하였다.
public boolean isSubsequence(String s, String t) {
        if(s.isEmpty())//for test_case 2?8?
            return true;

        int size_s=s.length();
        int size_t=t.length();
        int index_s=0;
        for(int index_t=0; index_t<size_t && index_s<size_s; index_t++){
            if(t.charAt(index_t)==s.charAt(index_s)){
                index_s++;
            }
        }
        if(index_s==size_s)
            return true;
        else
            return false;
    }


처음으로 효율적인 코드라고 박수를 받았다. 아마 처음에 s.toCharArray같이 접근할까 고민을 했었는데 .charAt으로도 충분히 가능할 것 같아 해당 방식을 사용한 것이 최적화에 큰 기여를 하지 않았을까 싶다. 이 차이를 실제로 확인해보고 싶어서 해당 방식으로도 제출해보았는데 이럴수가

public boolean isSubsequence(String s, String t) {
        if(s.isEmpty())//for test_case 2?8?
            return true;
        char[] s_=s.toCharArray(), t_=t.toCharArray();

        int size_s=s.length();
        int size_t=t.length();
        int index_s=0;
        for(int index_t=0; index_t<size_t && index_s<size_s; index_t++){
            if(t_[index_t]==s_[index_s]){
                index_s++;
            }
        }
        if(index_s==size_s)
            return true;
        else
            return false;
    }


0ms로 만점을 받았다. 시간이 더 걸릴것이라고 생각했던 이유가 .toCharArray()시 생성자의 호출 때문이었는데, 인덱스를 순회하며 접근하는 과정에서 char[]의 인덱스 접근 방식이 String의 .charAt보다 훨씬 빠르기 때문인 것으로 보인다. 처음 박수를 받은 것에 좋아했는데 처음으로 만점을 받아서 싱숭생숭하고, 새롭게 알아가는 부분이 있어서 흥미롭다.

profile
이제 3학년..

0개의 댓글