즉, 해당하는 인덱스 값이 없다는 말은 result 안에 그 원소가 없으므로 추가해주면 됩니다.
있다면 인덱스 값이 나오므로 추가해주지 않으면 중복처리가 되는 것이지요.
최종적으로 StringBuilder객체 result를 String으로 형변환하여 반환합니다.
● StringBuilder result = new StringBuilder();
for (int i = 0; i < my_string.length(); i++) { char c = my_string.charAt(i); if (result.indexOf(String.valueOf(c)) == -1) { result.append(c); } }
return result.toString(); } }
4) 코드
class Solution {
public String solution(String my_string) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < my_string.length(); i++) {
char c = my_string.charAt(i);
if (result.indexOf(String.valueOf(c)) == -1) {
result.append(c);
}
}
return result.toString();
}
}
5) 느낀점
indexOf가 String 클래스의 메소드라 StringBuilder 객체인 result를 string으로 변환해야 사용이 가능하다는 사실을 알았습니다.
그리고 다른 사람들이 어떻게 이 문제를 해결하였나보니 아래와 같은 두가지 방법을 더 확인할 수 있었습니다.
마찬가지로 my_string의 문자 하나하나를 분해하여 그 값을 string 변환하여 answer 문자열 내에 포함되어있나 여부를 확인하고, 없다면 answer 문자열에 추가하는 방식을 채택하였습니다.
* HashSet 자료구조를 이용하여 중복 확인
import java.util.HashSet;
class Solution {
public String solution(String my_string) {
HashSet<Character> uniqueChars = new HashSet<>();
StringBuilder result = new StringBuilder();
for (char c : my_string.toCharArray()) {
if (!uniqueChars.contains(c)) {
result.append(c);
uniqueChars.add(c);
}
}
return result.toString();
}
}
HashSet 자료구조는 중복원소를 허용하지 않습니다.
그래서 for반복문으로 HashSet을 확인했을 때 my_stringd의 charAt(i)가 없다면 result에 추가, HashSet에도 추가하는 방식을 채택하였습니다. 사실 위랑 크게 차이는 없을 것 같습니다.
HashSet은 중복을 허용하지 않는 구조인데, contains로 또 확인을 하는 것은 이차검증이 아닐까 싶습니다.