본문 바로가기

프로그래머스(Java)/Level 0

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

728x90

코드 힌트

  1. 알파벳 빈도수 카운트:
    • 문자열에 포함된 각 알파벳의 등장 횟수를 카운트해야 합니다. 이를 위해 int 배열을 사용하여 알파벳의 빈도수를 저장합니다.
    • 배열의 인덱스는 알파벳의 ASCII 코드에서 'a'를 뺀 값을 사용하여 각 알파벳을 구분합니다. 예를 들어, 'a'는 인덱스 0, 'b'는 인덱스 1, 'z'는 인덱스 25입니다.
  2. 문자 빈도수 처리:
    • 문자열을 순회하면서 각 문자의 등장 횟수를 배열에 기록합니다. 배열의 값이 1인 경우 해당 문자는 문자열에서 유일하게 나타난 문자입니다.
  3. 결과 문자열 생성:
    • 등장 횟수가 1인 문자를 찾으면, 이 문자를 결과 문자열에 추가합니다.
    • StringBuilder를 사용하여 최종 결과 문자열을 효율적으로 구성합니다.
  4. 문자와 인덱스 변환:
    • 배열의 인덱스를 문자로 변환하려면, char로 변환할 때 인덱스에 'a'를 더합니다. 이는 인덱스를 ASCII 코드로 변환하여 문자로 바꾸는 방법입니다.
  5. 복잡도 고려:
    • 이 코드는 문자열을 한 번 순회하여 빈도수를 계산하고, 알파벳 배열을 한 번 순회하여 결과를 생성하므로 시간 복잡도는 O(n)입니다. 이 접근 방식은 효율적입니다.

 


정답은 더보기 클릭

더보기
class Solution {
    public String solution(String s) {
        // 알파벳의 등장 횟수를 저장할 배열 초기화 (a부터 z까지 26개)
        int[] alphaIndex = new int[26];
        
        // 주어진 문자열을 순회하며 각 알파벳의 등장 횟수를 카운트
        for (char c : s.toCharArray()) {
            alphaIndex[c - 'a']++;  // 'a'를 빼서 알파벳을 0~25 범위로 매핑
        }
        
        // 결과 문자열을 생성하기 위한 StringBuilder 초기화
        StringBuilder sb = new StringBuilder();
        
        // 각 알파벳의 등장 횟수를 확인
        for (int i = 0; i < alphaIndex.length; i++) {
            // 등장 횟수가 1인 알파벳을 결과 문자열에 추가
            if (alphaIndex[i] == 1) {
                sb.append((char)('a' + i));  // 인덱스를 문자로 변환하여 추가
            }
        }
        
        // 결과 문자열 반환
        return sb.toString();
    }
}
728x90