Notice
Recent Posts
Recent Comments
Link
beepbeep
LeetCode 58번 - Length of Last Word 본문
문제 살펴보기
이번 문제는 주어진 문자열에서 가장 마지막에 위치한 단어의 길이를 계산하는 문제이다.
예를 들어 주어진 문자열이 "Hello World"이면, 마지막에 사용한 단어가 World이므로 그 길이인 5를 반환하면 된다.
생각의 흐름
처음에는 문자열을 뒤에서부터 검사해 공백을 찾은 후, 공백 다음 문자부터 문자열이 끝날때까지의 길이를 세면 된다고 생각했으나 예시로 주어진 문자열 중 끝부분에 공백이 있는 문자열이 있었다.
예를 들면 " Hello World " 같은 문자열이다. 문자열의 끝 부분에 공백이 있으므로, 앞서 생각했던 방법을 적용하면 단어를 찾을 수 없다...
그래서 문자열에서 마지막으로 사용된 단어의 시작 인덱스와 끝 인덱스를 찾은 후, 길이를 계산하기로 했다.
풀어보기
// 단어의 길이를 저장할 변수이다.
int count = 0;
// 문자열에서 '마지막으로 사용된 단어'가 끝나는 부분의 '인덱스'를 저장할 변수이다.
// 문자열의 끝부터 검사할 때 반복자로 사용하기 위해서 문자열의 길이를 대입했다.
int end = s.length();
// 공백이 아닌 글자, 즉 '마지막으로 사용된 단어의 끝 글자'를 만날 때까지
// end에서 1씩 차감하는 반복문이다.
// 마지막으로 사용된 단어의 끝 글자를 만나면 반복문이 종료되고,
// end에는 단어의 끝 글자의 인덱스 번호가 저장된다.
// end<0이면 단어가 없는 것이므로 즉시 0을 반환한다.
while(s.charAt(end-1)==' '){
end--;
if(end<0) return 0;
}
// 단어의 끝부터 해당 단어가 끝날 때까지, 즉 공백을 만나기 전까지 단어의 길이를 센다.
// 공백을 만나거나(s.charAt(end-1)==' ')
// end가 0이면 더 이상 셀 필요가 없으므로 반복문을 종료한다.
while(s.charAt(end-1)!=' '){
count++;
end--;
if(end==0) break;
}
return count;
// 주석 없는 전문
int count = 0;
int end = s.length();
if(end==0) return 0;
while(s.charAt(end-1)==' '){
end--;
if(end<0) return 0;
}
while(s.charAt(end-1)!=' '){
count++;
end--;
if(end==0) break;
}
return count;
풀어보기2
제출한 후 다른 사람들의 풀이를 보니, 대부분 split을 사용해 해결한 것을 알 수 있었다.
그래서 split을 사용해서 한번 더 풀어보았다.
// 공백을 기준으로 문자열을 잘라 단어를 얻고, 자른 단어들로 배열을 만든다.
String[] arr = s.split(" ");
// 배열의 마지막에 저장된 단어의 길이를 반환한다.
return arr[arr.length-1].length();
코드가 아주 짧고 깔끔해졌다!
하지만 속도나 메모리 사용량 등 성능 측면에서는 오히려 더 불리해졌다...
장단점이 있는 것 같다.
'코딩테스트 연습 > 기타' 카테고리의 다른 글
LeetCode 48번 - Lotate Image (0) | 2023.03.16 |
---|---|
프로그래머스 콜라 문제 (0) | 2023.02.19 |
약수 개수 세기 (0) | 2023.02.14 |
프로그래머스 치킨쿠폰 문제 - 나누기와 빼기의 반복 횟수 비교 (0) | 2023.02.07 |
프로그래머스 - 구슬을 나누는 경우의 수(feat. 조합) (0) | 2023.01.25 |