Lexicographically Smallest String After Operations With Constraint

유승선 ·2024년 4월 12일
0

LeetCode

목록 보기
115/122

쉬운 문제인데 너무 이상하게 시간 낭비를 했다. 이 문제는 읽자마자 String 과 Greedy 유형이라고 생각했다. Lexicographically smallest 면은 사전 상 가장 먼저오는 캐릭터가 무조건 앞에 와야 전체적인 결과에서 이득이라 생각했기 때문이다.

그렇기 위해서 처음 부터 루프를 통해서 읽을 때 left ('a' 에서 시작할 때 걸린 횟수), right ('z' 에서 넘어갈 때 걸린 횟수) 를 비교해서 최소한에 거리가 나오며, K보다 작거나 같을 때 해당 캐릭터를 'a' 로 바꾼다. 왜냐면 'a' 만 목표로 하고 있기 때문.

만약 'a' 로 만들 수 없다면, 그냥 k 만큼의 distance 를 모두 빼주면 된다. 쉬운 문제인데 아스키 캐릭터가 오랜만이라 좀 헤맸던 내 자신이 아쉽다.

class Solution {
public:
    string getSmallestString(string s, int k) {
        string answer = ""; 
        
        for(int i = 0; i < s.length(); i++){
            int left = s[i] - 'a'; 
            int right = 'z' - s[i] + 1; 
            int min_ = min(left, right); 

            if(k >= min_){
                answer += 'a'; 
                k -= min_; 
            } else{
                answer += s[i] - k;
                k = 0; 
            }
        }
        return answer; 
    }
};
profile
성장하는 사람

0개의 댓글