개발 공부/알고리즘 문제 풀이

[LeetCode] 6. ZigZag Conversion

종범2 2021. 6. 23. 17:06

문제

LeetCode 6. ZigZag Conversion

https://leetcode.com/problems/zigzag-conversion/

 

ZigZag Conversion - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

언어

자바스크립트(JavaScript)

 

접근 방법

  1. numRows 크기의 배열을 생성한다.
  2. 사이클의 크기를 계산한다.
  3. 사이클에 맞게 각 배열에 문자를 삽입한다.
  4. 각 배열의 문자를 합쳐 반환한다.

코드

/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
var convert = function(s, numRows) {
    if(numRows === 1 ){
        return s;
    }
    // 사이클의 크기 계산
    const cycleSize =  2 * numRows - 2;
    const arr = new Array(numRows).fill('');
    // 사이클에 맞게 각 배열에 문자 삽입
    for (let i=0; i<s.length; i++){
        let cycleIdx = i % cycleSize;
        let rIdx = (cycleIdx < numRows) ? cycleIdx : 2 * numRows - cycleIdx - 2;
        arr[rIdx] += s[i]; 
    }
    return arr.join('');
};

결과

Runtime: 104 ms, faster than 84.88% of JavaScript online submissions for ZigZag Conversion.

Memory Usage: 42.4 MB, less than 83.98% of JavaScript online submissions for ZigZag Conversion.

 

복기

  1. 처음에 2차원 배열로 풀었는데, 훨씬 간단하게 1차원 배열로 풀 수 있었다.
  2. 더 간단하게 풀 수 있는 생각을 해야한다.