[leetcode, JS] 1370. Increasing Decreasing String

mxxn·2023년 10월 12일
0

leetcode

목록 보기
94/198

문제

문제 링크 : Increasing Decreasing String

풀이

/**
 * @param {string} s
 * @return {string}
 */
var sortString = function(s) {
    const sObj = {}
    s = s.split('').sort()
    for(let el of s) {
        sObj[el] ? sObj[el] += 1 : sObj[el] = 1
    }
    let chk = true
    let result = ''
    while(chk) {
        let str = result
        for(let key in sObj) { 
            if(sObj[key] > 0) {
                str += key
                sObj[key] -= 1
            }
        }

        let reverseStr = ''
        for(let key in sObj) { 
            if(sObj[key] > 0) {
                reverseStr += key
                sObj[key] -= 1
            }
        }
        str += reverseStr.split('').reverse().join('')
        str === result ? chk = false : result = str
        
    }

    return result
};
  1. 문자열 s를 sort하고
  2. 알파벳 개수를 구한 후
  3. 알파벳을 다 쓸 때까지 while문을 돌리고, 오름차순/내림차순 문자열을 만들어 result에 더하는 방식
  • Runtime 99 ms, Memory 49 MB (비효율적)

다른 풀이

/**
 * @param {string} s
 * @return {string}
 */
var sortString = function(s) {
    let temp = new Array(26).fill(0);
    let ans = [];
    
    for (let i=0; i<s.length; i++) {
        temp[s.charCodeAt(i) - 97] += 1;   
    }
   
    let flag = true;
    while(ans.length < s.length) {
       for (let i=0; i<temp.length; i++) {
           var pos = i;
           if (!flag) {
               pos = 25-i;
           }
           if (temp[pos] !==0) {
               ans.push(String.fromCharCode(pos+97));
               temp[pos] -= 1;
           }
       }
        
       flag = !flag; 
    }
    ans = ans.join('');
    
    return ans;
};
  1. 첫번째 풀이와 푸는 방식은 비슷하나, 여기선 배열을 사용
  2. flag를 두어 오름차순/내림차순으로 push하고, while문이 끝나면 결과 배열을 join하여 return
  • Runtime 52 ms, Memory 45.1 MB
profile
내일도 글쓰기

0개의 댓글