프로그래머스 - 중복된 문자 제거(Level 1)

2024. 1. 25. 21:39코딩테스트 정리(자바)

728x90

 

import java.util.*;

class Solution {
    public String solution(String my_string) {
        Set <String> set=new LinkedHashSet<>(); //순서보장, HashSet은 순서보장X
        String[] str=my_string.split("");
        for(String s:str){
            set.add(s);
        }
        
        String[] s=set.toArray(new String[0]); 
        //set을 배열로, set은 인덱스로 접근하지 못함.
        
        StringBuilder sb=new StringBuilder();
        for(String s1:s){
            sb.append(s1);
        }
        return sb.toString();
    }
}

 

1. HashSet은 넣은 순서대로 보관되지 않는다.

순서를 보장받고 싶다면 LinkedHashSet을 사용해야 한다

 

2. set은 인덱스로 접근하지 못한다. -> iterator로 접근은 가능

리스트처럼 원소 하나씩 리턴하지 못함. -> get 메서드가 없음

 

3. set을 배열로 만드는 법

String[] str=set.toArray(new String[0]);

 

자꾸 까먹는다.. 기억하자

 

 

 


HashSet을 이용한 풀이

: set을 통해 해당 문자열이 있는지 확인 .

set에 넣지않고 바로 StringBuilder에 담아서 순서문제 해결.

 

import java.util.*;

class Solution {
    public String solution(String my_string) {
        Set <String> set=new HashSet<>(); 
        String[] str=my_string.split("");
        StringBuilder sb=new StringBuilder();
        
        for(String s:str){
            if(set.contains(s))
                continue;
            set.add(s);
            sb.append(s);
        }
        
     
        return sb.toString();
    }
}

 

char로 확인하는 것도 가능

import java.util.*;

public class Solution {
    public String solution(String myString) {
        Set<Character> used = new HashSet<>();

        StringBuilder builder = new StringBuilder();
        for (char c : myString.toCharArray()) {
            if (used.contains(c)) continue;
            used.add(c);
            builder.append(c);
        }

        return builder.toString();
    }
}
728x90