ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • algorithm
    자바 알고리즘 - 중복된 문자 제거
    2023. 9. 5. 11:02
    728x90

    문제 설명

    문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.

     

    제한 사항

    • 1 ≤ my_string ≤ 110
    • my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
    • 대문자와 소문자를 구분합니다.
    • 공백(" ")도 하나의 문자로 구분합니다.
    • 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.

     

    답안

    import java.util.*;
    
    class Solution {
        public String solution(String my_string) {
            String answer = "";
            String[] arr = my_string.split("");
    
            answer += arr[0];
            for(int i=1; i<arr.length; i++) {
                if(answer.contains(arr[i])) {
                    continue;
                }else
                {
                    answer+= arr[i];
                }
            }
    
            return answer;
    
        }
    }

    my_string 문자열을 split()을 통해 String 배열로 만든 뒤 answer에 첫번째 문자열을 넣어준다.

    그리고 for문을 돌면서 answer에 contains() 함수를 이용해서 문자열이 포함되어 있는지 아닌지를 판단하여 문자열을 넣어준다.

    이렇게 contains을 이용해서 문제를 풀어도 되지만 indexOf()를 활용한 방법도 존재한다.

     

    class Solution {
        public String solution(String my_string) {
            String answer = "";
    
            for(int i=0; i<my_string.length(); i++){
                if(i==my_string.indexOf(my_string.charAt(i)))
                    answer+=my_string.charAt(i);
            }
    
            return answer;
        }
    }

    굳이 my_string을 배열로 만들지 않고 indexOf()의 리턴값인 문자열이 포함되어 있다면 첫번째 문자열의 인덱스를 갖고온다는 것을 이용해서 풀 수 있다.

    charAt()을 이용해 전체 문자열에서 한글자씩 떼어내 indexOf()로 인덱스를 확인한다. 당연히 모든 문자는 my_string에 포함되어 있기 때문에 indexOf를 통해 인덱스가 반환되지만 중복된 문자열 또한 맨 처음 등장한 문자열의 인덱스가 반환되기 때문에 중복된 문자열이 오더라도 answer에 두번 더해질 수 없다.

     

    중복이냐 아니냐를 판단하는 것이 아닌 무조건 첫번째 등장한 문자열만 저장하기 때문에 이 방식이 이번 자바 알고리즘 문제에서 원하는 답이 아닐까 싶다.

     

    참고

    • 문자열.split(구분자) : 구분자를 이용해서 문자열을 끊어서 배열로 반환, 구분자가 공백인 경우 한글자씩 끊어서 배열로 반환.
    • 문자열.contains(A) : 문자열에 A 문자가 있는지 체크하는 함수, 있다면 true 없다면 false 리턴
    • 문자열.indexOf(A) : 문자열에 A 문자의 인덱스 위치 반환하는 함수, 없다면 -1를 리턴
    • 문자열.charAt(인덱스) : 기준 문자열에서 인덱스 위치에 해당하는 문자열 한글자를 char 타입으로 반환
    728x90
Designed by Tistory.