본문으로 바로가기

LeetCode 6. ZigZag Conversion

이 문제는 입력받은 String을 문제에서 준 지그재그 패턴 조건에 따라 변형하여 출력하는 문제이다. 

LeetCode 문제 바로 가기

LeetCode에서 푼 문제 리스트 바로 가기

github에서 코드 보기


문제에서 제시한 조건

 "PAYPALISHIRING"는 지그재그 패턴으로 문자를 나열할 경우 다음과 같다. 결과는 "PAHNAPLSIIGYIR"으로 출력된다. 

P   A   H   N
A P L S I I G
Y   I   R

Related Topics

String

문제 풀이

문제에서는 지그재그 패턴대로 문자를 나열 했을 때, 규칙을 찾으면 쉽게 풀 수 있다. 

지그재그의 패턴 원칙대로 각 층별로 lines 배열에 그 값을 저장해나간다.

P A H N <- lines[0] 에 저장 A P L S I I G <- lines[1] 에 저장 Y I R <- lines[2] 에 저장

python에서는 문자열도 index 값으로 접근이 가능하므로 문자열의 처음부터 끝까지 순회하여 그 끝에 도달했을 때,

lines 배열의 원소로 저장된 string을 join하여 반환한다.

첫번째 Index부터 numRows만큼은 차례대로 lines에 저장한다. 여기선 lines[0], lines[1], lines[2]에 저장하게 된다.

그 다음 문자부터 numRows -2 만큼 마지막 index의 -1 만큼부터 1만큼씩 numRows-2만큼 줄여 값을 저장해 나간다. 여기선 lines[1]에만 저장된다. 

저장해야 하는 index의 패턴을 down_index, up_index에 저장하여 문자열이 끝날때까지 for 문을 돌렸다.


파이썬 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution:
    def convert(self, s: 'str', numRows: 'int'-> 'str':
        lines = ['' for i in range(numRows)]
        flag = True
        down_index = [n for n in range(numRows)]
        up_index = [n for n in range(numRows - 20-1)]
        while True and flag:
            for di in down_index:
                if not len(s):
                    flag = False
                    break
                lines[di] += s[0]
                s = s[1:]
            for di in up_index:
                if not len(s):
                    flag = False
                    break
                lines[di] += s[0]
                s = s[1:]
        return ''.join(lines)
cs

#LeetCode 6. ZigZag Conversion #LeetCode 6 #python LeetCode 6 #LeetCode 6 python #ZigZag Conversion #zigzag conversion #6 zigzag conversion

# leetcode zigzag conversion #LeetCode 6 ZigZag Conversion