반응형

문제 해결 방안
- 아스키 코드를 통해 공백과 특수문자를 걸러냅니다.
StringBuilder
를 통해 걸러진 새로운 문자열을 생성하고,reverse
메소드를 통해 뒤집힌 문자열을 만들어 냅니다.- 2개를 비교해서 같으면
True
, 다르면False
를 반환합니다.
겪은 문제점
1. 아스키 코드
우선 아스키 코드를 써야한다는 것은 생각했지만, 알파벳과 숫자의 아스키 코드 값이 기억이 나지 않았습니다.
실제로 테스트를 하는 상황이었다면 좀 암담했을 거 같습니다.

2. 해당하지 않는 문자를 제거하다보니 String의 길이가 줄어들어서 예외 발생
처음에는 아스키 코드를 기준으로 제외할 문자들을 삭제하는 식으로 진행했습니다.
// s는 문제에서 입력받은 초기 문자열
StringBuilder str = new StringBuilder(s.toUpperCase()); //관련 메소드 사용을 위한 StringBuilder로 변환
for(int i=0; i<s.length(); i++){
if((str.charAt(i) < 65 || str.charAt(i) > 90) || (48 > str.charAt(i) || str.charAt(i) > 57)){
str.deleteCharAt(i);
}
}
하지만 이렇게 하니, for문에서 i는 증가하고 있는데, str의 길이는 짧아지다보니 예외가 발생했습니다.
아래와 같이 새로운 문자열을 생성해주고, 해당하는 문자만 추가해주는 식으로 변경했습니다.
StringBuilder str = new StringBuilder(s.toUpperCase());
StringBuilder newStr = new StringBuilder();
for(int i=0; i<s.length(); i++){
if((str.charAt(i)>=65 && str.charAt(i)<=90) || (48<=str.charAt(i) && str.charAt(i)<=57)){
newStr.append(str.charAt(i));
}
}
3. StringBuilder에 대한 이해 부족
reverse 메서드를 쓰긴 했는데, 이게 객체 자체를 변환하는 것을 인지 못하고 사용해서 처음에는 계속 True
만 반환되는 상황이 생겼습니다.
// 기존 코드
// str은 원래 문자열
StringBuilder reverse = str.reverse();
if(str.toString().equals(reverse.toString()){
return true;
}
return false;
이렇게 하니깐, str 객체 자체가 reverse되어 항상 같은 값이 나오는 것이었습니다.
그래서 아래와 같이 우선 기존 문자열을 새로운 객체에 담고 진행했습니다.
String origin = str.toString();
String reverse = str.reverse().toString();
if(origin.equals(reverse)){
return true;
}
return false;
정답 코드
public static boolean isPalindrome(String s) {
StringBuilder str = new StringBuilder(s.toUpperCase());
StringBuilder newStr = new StringBuilder();
for(int i=0; i<s.length(); i++){
if((str.charAt(i)>=65 && str.charAt(i)<=90) || (48<=str.charAt(i) && str.charAt(i)<=57)){
newStr.append(str.charAt(i));
}
}
String origin = newStr.toString();
String reverse = newStr.reverse().toString();
if(origin.equals(reverse)){
return true;
}
return false;
}
반응형
'방구석 컴퓨터 > 방구석 자료구조&알고리즘' 카테고리의 다른 글
[LeetCode][Grind 75] 226. Invert Binary Tree (0) | 2024.11.01 |
---|---|
[LeetCode][Grind 75] 121. Best Time to Buy and Sell Stock (0) | 2024.11.01 |
[LeetCode][Grind 75] 21. Merge Two Sorted Lists (0) | 2024.11.01 |
해시맵을 사용하기 적합한 상황 (1) | 2024.10.30 |
하노이 탑 (0) | 2021.01.14 |