본문으로 바로가기

leetcode. ZigZag Conversion

category Algorithm/문제 2021. 1. 18. 02:19

문제

요약

문자열과 정수가 주어지면 그에 맞는 지그재그 문자열로 변환 후 반환하는 함수를 작성하라

이건 설명보단 예시를 보면 이해가 쉽다

풀이

예시를 보면 입력된 정수의 크기와 열의 길이가 똑같은 것을 알 수 있다

0 : P A H N
1 : A P L S I I G
2 : Y I R

그럼 정수 크기만큼 배열을 선언한 뒤 문자를 각각 배열에 넣어주면 될거라는 생각이 들었고 곧

P A H N A P L S I I G Y I R
0 1 2 1 0 1 2 1 0 1 2 1 0 1

이런 반복적인 패턴을 알 수 있어서 이제 차례대로 배열에 넣기만 하면되겠다는 생각을 했는데...

01210..을 어떻게 반복시킬까 고민하던 중 그냥 패턴을 배열화 시켜서 패턴만 따로 돌리자는 아이디어가 떠올랐다

/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
var convert = function(s, numRows) {
    const arr ={};
    for(let i=0; i<numRows; i++) arr[i] = [];
    let index=0;
    const pattern = makePattern(numRows);
    let answer='';

    while(index<s.length){
        arr[pattern[index%pattern.length]].push(s[index]);
        index++;
    }
    for(let i=0;i<numRows;i++){
        answer += arr[i].join('');
    }

    return answer;
};
function makePattern(number) {
    const newArr =[];
    for(let j=0; j<number;j++){
        newArr.push(j);
    }
    for(let j=number-2;j>0;j--){
        newArr.push(j);
    }

    return newArr;
}

'Algorithm > 문제' 카테고리의 다른 글

baekjoon. LCS  (0) 2021.01.26
leetcode. Reverse Integer  (0) 2021.01.19
leetcode. Longest Substring Without Repeating Characters  (0) 2021.01.16
leetcode. Add Two Numbers  (0) 2021.01.14
leetcode. Two Sum  (0) 2021.01.11