https://leetcode.com/problems/zigzag-conversion/description/?envType=study-plan-v2&envId=top-interview-150
접근방법
- numRows가 1일 때는 기존 스트링을 반환, 2일 때는 짝수번째 문자들 + 홀수번째 문자들을 반환하여 전처리
- numRows가 3이상인 경우, s를 순회하며 해당 문자가 어느 row에 들어갈지를 판단한다.
- 인덱스를 (2 * numRows - 2)로 나눈 나머지로 어느 row에 들어갈지 판단할 수 있다.

- 위 그림에 빨간색으로 칠해진 부분이 반복되므로 나머지가 n보다 작거나 같은 경우에는 해당 나머지에 해당하는 열에 문자를 추가
- 나머지가 n보다 큰 경우에는
(2 * numRows -2) - 나머지 에 해당하는 열에 문자를 추가한다
소스코드
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows == 1:
return s
elif numRows == 2:
return s[0::2] + s[1::2]
answer = ""
rows = ["" for _ in range(numRows)]
for i in range(len(s)):
row_idx = i % (2 * numRows - 2)
if row_idx < numRows:
rows[row_idx] += s[i]
else:
rows[(2 * numRows - 2) - row_idx] += s[i]
for row in rows:
answer += row
return answer