반응형
[Problem]
Implement function ToLowerCase() that has a string parameter str, and returns the same string in lowercase.
[Example1]
Input: "Hello"
Output: "hello"
[Example2]
Input: "here"
Output: "here"
[Example3]
Input: "LOVELY"
Output: "lovely"
[Solution]
import java.lang.StringBuilder;
class Solution {
public String toLowerCase(String str) {
char[] characters = str.toCharArray();
int strLen = str.length();
StringBuilder sb = new StringBuilder();
for(int i = 0; i<strLen; i++){
if(characters[i] < 97 && characters[i] >= 65){
sb.append((char)(characters[i] + 32));
}else{
sb.append(characters[i]);
}
}
return sb.toString();
}
}
Java의 String 클래스에는 toLowerCase라는 메서드가 있다. 주어진 문자열을 모두 소문자로 치환하는 메서드이다.
이번 알고리즘 문제는 해당 기능을 구현하는 문제였다. 사실 아스키코드값만 알고 있으면 간단한 문제이다. 아스키코드에서 대문자는 65(A)부터 시작하고 소문자는 97(a)부터 시작한다. 이 차이는 32로 대문자를 소문자로 만들고 싶으면 32를 더하고, 소문자를 대문자로 만들고 싶으면 32를 빼주면 된다. 들어온 String 문자열을 Char 배열로 변환하고 소문자로 정말 치환된 문자열을 만들기 위해서 StringBuffer와 StringBuilder 클래스 중 어느 것을 사용할까 했는데, StringBuffer의 경우 Thread-Safe 한 클래스이기 때문에 메모리를 더 잡아먹을 것 같아 StringBuilder 클래스를 사용했다(뇌피셜).
* 글을 작성하는 시점에서 StringBuilder 대신 StringBuffer로 변경한 코드를 돌려봤다.
역시나 StringBuilder 클래스일 때보다 메모리를 0.3 MB 정도 더 잡아 먹는다. 뇌피셜이 맞아서 뿌듯하다 ㅎㅎ
반응형
'Programming > Algorithm' 카테고리의 다른 글
[Java-알고리즘] Two Sum (0) | 2019.10.30 |
---|---|
[Java-알고리즘] RangeSumBinaraySearchTree (0) | 2019.10.27 |
[Java-알고리즘] Split a String in Balanced Strings (0) | 2019.10.26 |
[Java-알고리즘] Jewels and Stones (0) | 2019.10.26 |
[Java-알고리즘] IP 주소 분리 (0) | 2019.10.26 |