[JAVA] 프로그래머스 : 한 번만 등장한 문자
문제 설명
문자열 s
가 매개변수로 주어집니다. s
에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.
My Solution
Code
public class P120896 {
public String solution(String alpabet) {
if (Objects.equals(alpabet, "") || alpabet == null) {
return "";
}
HashMap<String, Integer> answerMap = new HashMap<>();
// Step1
for (char ch : alpabet.toCharArray()) {
var key = String.valueOf(ch);
answerMap.putIfAbsent(key, 0);
Integer count = answerMap.get(key);
answerMap.put(key, count + 1);
}
// Step2
StringBuilder sb = new StringBuilder();
for (String key : answerMap.keySet()) {
int count = answerMap.get(key);
if (count == 1) {
sb.append(key);
}
}
// Step3
char[] chars = sb.toString().toCharArray();
Arrays.sort(chars);
return new String(chars);
}
}
Approach
- 문제에서 “한 번만 등장”하는 문자를 사전 순서대로 정렬을 요구함
- “한 번만 등장” 은 “중복된 문자”는 카운트하지 않는다라고 가정함
- “중복된 문자”를 파악하기 위해 HashMap 사용함
Step1
- HashMap을 선언하고 다음과 같은 순서에 따라 HashMap 초기화
- 주어진 문자열 “s”를 반복하며 HashMap에 들어있지 않다면 0으로 초기화
- putIfAbsent(key, 0)
- 문자열의 원소에 대해 카운트
- Integer count = answerMap.get(key)
- 이후 answerMap에 “문자열 원소”의 카운트를 1씩 증가시킴
- 주어진 문자열 “s”를 반복하며 HashMap에 들어있지 않다면 0으로 초기화
Step2
- step1에서 초기화된 HashMap의 원소 중 value가 “1”인 게 정답 문자열임
- count 수가 1인 것만 StringBuilder로 초기화
Step3
- 사전 순으로 정렬해야하기 때문에 StringBuilder를 문자 배열로 변환한뒤 Arrays.sort를 사용해 문자열 정렬 후 정답 리턴
Review
생각한 순서대로 구현하긴 했지만 코드가 너무 장황한 듯 싶다.
연산 -> 변환 -> 연산 -> 변환
의 과정
다른 방법으로 처리할 순 없을까 ?
Enhanced
다른 사람 풀이
Leave a comment