프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] 중복된 문자 제거(Java)

Sigfriede 2023. 3. 28. 21:54

  문제 설명

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

 

  제한사항

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

 

  입출력 예

my_string result
"people" "peol"
"We are the world" "We arthwold"
class Solution {
    public String solution(String my_string) {
        String answer = "";
        for (int i = 0; i < my_string.length(); i++) {
            if (my_string.indexOf(my_string.charAt(i)) == i) {
                answer += my_string.charAt(i);
            }
        }
        return answer;
    }
}

  for문으로 my_string의 길이만큼 순회합니다. if문에서 indexOf는 특정 문자의 위치를 찾습니다. 위의 코드의 경우 my_string.charAt(i), 즉 my_string의 i번째 문자를 my_string 문자열에서 찾는 것입니다. 그렇게 찾은 문자의 인덱스 위치와 i값을 비교합니다. indexOf는 처음으로 등장하는 문자 혹은 숫자를 반환하므로, 만약 중복값이 있다면 무시하게 될 것입니다. 그러므로 제한사항에서 원하는 '중복된 문자 중 가장 앞에 있는 문자를 남깁니다.' 라는 조건을 충족할 수 있습니다.

  입출력 예를 예시로 들어보겠습니다. 'i = 0' 일 때, my_string의 0번째 문자는 p입니다. my_string.indexOf는 my_string 문자열에서 p의 위치를 찾을 것입니다. p의 위치는 0번 인덱스에 있으므로 i의 값과 일치하여 answer에 추가됩니다. 다만, 앞서 말했듯 indexOf는 '처음 등장하는 값'만을 반환하므로 'i = 3'일때의 charAt(i)에서 반환하는 두 번째 p와 indexOf에서 찾은 첫 번째 p의 인덱스와 일치하지 않으므로 무시하고 for문을 다시 반복하게 됩니다.

  틀린 설명이 있을 수 있습니다. 혹시 틀린 설명이 있다면 알려주세요!