오늘한일
1. LeetCode
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보다 훨씬 빠르기 때문인 것으로 보인다. 처음 박수를 받은 것에 좋아했는데 처음으로 만점을 받아서 싱숭생숭하고, 새롭게 알아가는 부분이 있어서 흥미롭다.