☑️ 정답1 (아래에 더 나은 방법으로 풀기)
✔ 체크 할 부분
1) cnt = 0이라는 변수를 둬서, 중복되는 값이 있다면 cnt를 +1씩 늘려주기
2) 그리고 cnt가 1인 경우는 값이 딱 1개만 있다는 의미니, 해당 값에 해당하는 값을 answer에 추가하기
3) 정렬을 우선 해주고 시작하는게 좋음
// cnt=0을 사용해서, 만약 동일 값이 있다면 +1해주고, 없다면 아무 작업 안 하도록
// cnt가 1이라면, 자기 자신만 있다는 의미라서, 해당 값을 answer에 추가해주기
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
String[] arr = s.split("");
Arrays.sort(arr);
for(int i = 0; i < arr.length; i++){
int cnt = 0;
for(int j = 0; j < arr.length; j++){
if(arr[i].equals(arr[j])){
cnt += 1;
}
}
if(cnt == 1){
answer += arr[i];
}
}
return answer;
}
}
☑️ 정답2 (더 나은 방법)
✔ 체크 할 부분
1) map.getOrDefault(a,b); --> map에서 a라는 key값이 있으면 a를 반환, 없다면 b를 반환
2) 문자열 결합이 많은 경우는 StringBuilder사용하기
(answer += b의 방식보다 1.메모리 낭비 적음 2. 속도 빠름,시간 복잡도 낮음)
3) if(map.get(b) == 1){ sb.append(b); } 이 부분에서 b == 1이 아니라, map의 value값이 1인걸 찾아야 함
import java.util.*;
class Solution {
public String solution(String s) {
String answer = "";
String[] arr = s.split("");
Arrays.sort(arr); // 사전순 정렬
Map<String, Integer> map = new HashMap<>();
for(String a : arr){
map.put(a, map.getOrDefault(a,0) + 1); // a가 있으면 기존 값+1, 없으면 0+1
}
StringBuilder sb = new StringBuilder();
for(String b : arr){
if(map.get(b) == 1){
sb.append(b);
}
}
return sb.toString();
}
}
'Coding Test' 카테고리의 다른 글
(CodingTest) : 26일차 인덱스 바꾸기 (0) | 2025.04.25 |
---|---|
(SQL > ★ SELF JOIN Lev2) : 20일차 연도별 대장균 크기의 편차 구하기 (0) | 2025.04.25 |
(CodingTest) : 25일차 영어가 싫어요 (0) | 2025.04.23 |
(CodingTest) : 25일차 대문자와 소문자 (0) | 2025.04.23 |
(SQL > COUNT,DISTINCT Lev2) : 19일차 중복 제거하기 (1) | 2025.04.23 |