[Programmers][JAVA] 한 번만 등장한 문자

Myung A Lee·2023년 8월 10일
0

CodingTest

목록 보기
7/11
post-thumbnail

[level 0] 한 번만 등장한 문자 문제 링크

문제 설명

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


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

입출력 예
s result
"abcabcadc" "d"
"abdc" "abcd"
"hello" "eho"

나의 답안

import java.util.Arrays;

class Solution {
    public String solution(String s) {
        String answer = "";
        String[] str = s.split("");
        int cnt = 0;

        Arrays.sort(str);

        for (int i = 0; i < str.length; i++) {
        	cnt = 0;
			for (int j = 0; j < str.length; j++) {
				if (str[i].equals(str[j])) {
					cnt ++;
				}
			}
			if (cnt == 1) {
				answer += str[i];				
			}

		}
        return answer;
    }
}

HashMap을 활용한 풀이

  • 문자열 s를 나눈 것을 key값으로 하여 해시맵에 값을 추가한다.
  • getOrDefault(key, defaultValue)
    key : 값을 가져와야 하는 요소의 키
    defaultValue : 지정된 키로 매핑된 값이 없는 경우 반환되어야 하는 기본값
    * 반환 값 : 찾는 key가 존재하면 해당 key에 매핑되어 있는 값을 반환하고, 그렇지 않으면 디폴트 값이 반환된다.
  • 알파벳 순으로 정렬하기 위해 map.keySet()을 List로 만들어 주고 sort() 메서드를 이용해 정렬한다.
  • 해당 key의 value가 1이라면 문자열 answer에 추가해준다.
import java.util.*;

class Solution {
    public String solution(String s) {
        String answer = "";
        HashMap<String, Integer> map = new HashMap<>();
        
        for (String str : s.split("")) {
            map.put(str, map.getOrDefault(str, 0) + 1);
        }
        
        List<String> keyList = new ArrayList<>(map.keySet());
        keyList.sort(String::compareTo);
        for (String key : keyList) {
            if (map.get(key) == 1) {
                answer += key;
            }
        }
        
        return answer;
    }
}

0개의 댓글