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);
}
}