LeetCode - 6. Zigzag Conversion (python)

홍석희·2024년 2월 27일

https://leetcode.com/problems/zigzag-conversion/description/?envType=study-plan-v2&envId=top-interview-150

  • 난이도: medium
  • 알고리즘: string

접근방법

  • 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
profile
개발 기록

0개의 댓글