Shuffle String (leetcode 1528)

문제

문제 링크

image


solution1

  • 속도: 59ms
var restoreString = function (s, indices) {
    let output = "";
    for (let i = 0; i < s.length; i++) {
        output += s[indices.indexOf(i)];
    }
    return output;
};

const s = "codeleet";
const indices = [4, 5, 6, 7, 0, 2, 1, 3];

restoreString(s, indices); // 'leetcode'

indexOf를 평소 잘 안써보다보니 생각을 못했다.
속도도 빠른데 코드도 간단해서 가독성도 좋다.
배열의 요소가 뒤섞여 있는데 내가 원하는 어떤 순서대로 가져오고 싶을 때 indexOf를 사용하자!


solution2 (my answer)

  • 속도: 60ms (93.3%)
  • 메모리: 44.8mb (25.7%)
var restoreString = function (s, indices) {
    const len = s.length;
    let i = 0;
    Z;
    let j = 0;
    let obj = {};

    // obj 생성
    while (i < len) {
        obj[indices[i]] = s[i];
        i += 1;
    }

    // shuffle string
    let shuffleString = "";
    while (j < len) {
        shuffleString += obj[j];
        j += 1;
    }
    return shuffleString;
};

const s = "codeleet";
const indices = [4, 5, 6, 7, 0, 2, 1, 3];

restoreString(s, indices); // 'leetcode'
  1. 객체에 key는 숫자(0부터), value는 string 값을 매칭 시킨다.
  2. 0부터 값 가져와서 스트링 조합

속도는 제출할 때마다 조금씩 차이가 있었지만 최대 93.5%까지 나왔다.
즉, 객체를 검색 용도로 사용하는건 속도측면에서도 좋고 코드 쓰기도 편리한 것 같다.


댓글남기기