[LeetCode] Remove Letter To Equalize Frequency

아르당·2026년 9월 8일

LeetCode

목록 보기
514/561
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

인덱스가 0부터 시작하는 문자열 word가 주어지고, 영어 소문자로 구성된다. 하나의 인덱스를 선택하고 word에서 모든 문자의 나타나는 빈도가 같아지도록 인덱스의 문자를 word에서 제거해라.
word에서 모든 문자의 빈도가 같도록 하나의 문자만 제거하는게 가능하면 true, 그렇지 않다면 false를 반환해라.

Example

#1
Input: word = "abcc"
Output: true
Explanation: 인덱스 3을 선택하고 제거해라. word는 "abc"가 되고 각 문자는 1의 빈도를 가진다.

#2
Input: word = "aazz"
Output: false
Explanation: 하나의 문자를 지워야만 해서, "a"의 빈도가 1이고 "z"의 빈도가 2가 되거나 또는 반대이다. 나타나는 모든 문자는 같은 빈도로 만드는 것이 불가능하다.

Constraints

  • 2 <= word.length <= 100
  • word는 오직 영어 소문자로만 구성된다.

Solved

class Solution {
    public boolean equalFrequency(String word) {
        int[] letters = new int[26];

        for(char c : word.toCharArray()){
            letters[c - 'a']++;
        }

        for(int i = 0; i < 26; i++){
            if(letters[i] == 0){
                continue;
            }

            letters[i]--;

            if(isValid(letters)){
                return true;
            }

            letters[i]++;
        }

        return false;
    }
    
    private boolean isValid(int[] letters){
        int expected = 0;

        for(int letter : letters){
            if(letter == 0){
                continue;
            }

            if(expected == 0){
                expected = letter;
            }else if(letter != expected){
                return false;
            }
        }

        return true;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글