Algorithm/Programmers

[프로그래머스] 한 번만 등장한 문자 - Java

뭐든 해보기 2023. 5. 16. 16:32

문제) 문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.

 

제한사항)

  • 0 < s의 길이 < 1,000
  • s는 소문자로만 이루어져 있습니다.

입출력 예)

s result
"abcabcadc" "d"
"abdc" "abcd"
"hello" "eho"



입출력 예 설명)
입출력 예 #1

  • "abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.

입출력 예 #2

  • "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.

입출력 예 #3

  • "hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.

풀이)

1. 주어진 s 문자열을 char 배열로 변환 후 정렬

2. list 선언 후 char 배열에 있는 문자들 add

3. start_idx와 end_idx를 각각 선언하여 투 포인터 방식으로 찾기

4. start_idx와 end_idx를 비교해서 같은 문자라면 list에서 전부 제거

5. 다른 문자라면 start_idx와 end_idx 증가시켜주기

6. 공백 없이 문자열로 return

import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
class Solution {
    public String solution(String s) {
        String answer = ""; 
		char[] charArr = s.toCharArray();
		Arrays.sort(charArr); 
		
		List list = new ArrayList<>();
		for (int i = 0; i < charArr.length; i++) {
			list.add(String.valueOf(charArr[i]));
		}

		int start_idx = 0;
		int end_idx = 1;
		
		while(start_idx < end_idx && end_idx < list.size()) { 
			if(list.get(start_idx).equals(list.get(end_idx))) {
				list.removeAll(Arrays.asList(list.get(start_idx)));
			}
			else if(list.get(start_idx) != list.get(end_idx) ) {
				start_idx++;
				end_idx++;
			}
		}
        return String.join("", list);
    }
}