문제
소문자로 된 한개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성하세요.
중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다.
입력
첫 줄에 문자열이 입력됩니다. 문자열의 길이는 100을 넘지 않는다.
출력
첫 줄에 중복문자가 제거된 문자열을 출력합니다.
예시 입력
ksekkset
예시 출력
kset
출처
내 풀이
private static String removeDuplicate1(String input) {
Set set = new LinkedHashSet<>();
for (char ch : input.toCharArray()) {
set.add(ch);
}
StringBuilder result = new StringBuilder();
set.stream().forEach(result::append);
return result.toString();
}
순서가 저장되고 중복이 안되는 LinkedHashSet
을 사용
private static String removeDuplicate2(String input) {
StringBuilder result = new StringBuilder();
input.chars()
.distinct()
.forEach(result::appendCodePoint);
return result.toString();
}
Stream
의 distinct()
를 이용하여 중복을 제거
private static String removeDuplicate3(String input) {
StringBuilder result = new StringBuilder();
for (char ch : input.toCharArray()) {
if (result.indexOf(ch + "") < 0) {
result.append(ch);
}
}
return result.toString();
}
indexOf()
로 중복여부를 확인한후 없으면 결과에 추가한다
다른 풀이
public String solution(String str){
String answer="";
for(int i=0; i < str.length(); i++){
//System.out.println(str.charAt(i)+" "+i+" "+str.indexOf(str.charAt(i)));
if(str.indexOf(str.charAt(i))==i)
answer+=str.charAt(i);
}
return answer;
}
indexOf()
는 찾는 값이 중복되도 맨처음 찾은 위치를 반환하는 것을 이용
기억할 점
String.chars()는 IntStream
을 반환한다
char형 Stream은 없으니 주의
input.chars() // IntStream
.mapToObj(c->(char)c) // Stream<Character>
int형(유니코드 codepoint)으로 문자열을 만드려면 StringBuilder.appendCodePoint
를 사용하자
StringBuilder result = new StringBuilder();
input.chars()
.distinct()
.forEach(result::appendCodePoint);
'Java > Coding-Test' 카테고리의 다른 글
[Java] 1-9 숫자만 추출 (0) | 2022.01.15 |
---|---|
[Java] 1-8 유효한 팰린드롬 (0) | 2022.01.15 |
[Java] 1-7 회문 문자열 (0) | 2022.01.14 |
[Java] 1-3 문장 속 단어 (0) | 2022.01.08 |
[Java] 1-1 문자찾기 (0) | 2022.01.04 |
댓글