[JavaScript] 리트코드 - #6 Zigzag Conversion (Mideum)

배똥회장·2022년 11월 14일
0

📝 문제

리트코드 - #6 Zigzag Conversion (Mideum)


📝 답안

📌 작성 코드

var convert = function(s, numRows) {
    let result = "";
    let cut = numRows * 2 - 2;
    
    if (cut == 0) return s;

    let word = new Array();
    let index = 0;
    while (index < s.length) {
        word.push(s.substring(index, Math.min(index + cut, s.length)).split(""));
        index += cut
    }

    let start = 1;
    let end = cut-1;
    for (let i = 0; i < word.length; i++) {
        result += word[i][0];
    }

    while (start <= end) {
        for (let i = 0; i < word.length; i++) {
            result += (word[i][start] != null ? word[i][start] : "");
            if (start === end) continue;
            result += (word[i][end] != null ? word[i][end] : "");
        }
        start++;
        end--;
    }
    return result;
};

📌 결과


📌 설명

배열로 구현하면 되겠지만 문장을 한 줄로 했을 때 어느 순서로 입력이 되는지를 파악하면 쉽게 구현할 수 있는 문제였음

예를 들어 첫번째 테스트 케이스였던 s=PAYPALISHIRING, numRows=3일 때
지그재그의 첫 부분으로 돌아오기까지 4단어가 필요함

그래서 4 단어씩 잘라서 2차원 배열로 선언함

word=[[P,A,Y,P], [A,L,I,S], [H,I,R,I], [N,G]]

먼저, 가장 첫번째 줄 여기는 한 줄씩 밖에 올 수 없기 때문에 그냥 바로 해줌

그러면 result에는 PAHN이 담겨있음

그리고 나서 다음에 올 것을 생각하면 가운데 줄의 두 단어임
이것은 각각 [0][1], [0][3], [1][1], [1][3], [2][1], [2][3] 단어들이 옴 => 그래서 PAHNAPLSIIG => [2][3]에는 단어가 들어있지 않기 때문에 넘어감

그리고 나서 올 단어가 맨 마지막 줄인데 이게 세 줄 밖에 안되서 그렇지 처음 시작이었던 1에서 한칸 오른쪽으로, 처음 끝이었던 3에서 한칸 왼쪽으로 이동하는 식으로 움직임

그래서 이 과정을 코드로 구현함

profile
어쩌면 개발자

0개의 댓글