리트코드 - #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에서 한칸 왼쪽으로 이동하는 식으로 움직임
그래서 이 과정을 코드로 구현함