LeetCode 6. ZigZag Conversion
이 문제는 입력받은 String을 문제에서 준 지그재그 패턴 조건에 따라 변형하여 출력하는 문제이다.
문제에서 제시한 조건
"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 - 2, 0, -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
'온라인 코딩 테스트 문제 풀이 > LeetCode 문제 풀이' 카테고리의 다른 글
Python으로 푸는 LeetCode 877. Stone Game (0) | 2019.02.24 |
---|---|
Python으로 푸는 LeetCode 1. Two Sum (0) | 2019.02.13 |
Python으로 푸는 LeetCode 373. Find K Pairs with Smallest Sums (0) | 2019.02.11 |
Python으로 푸는 LeetCode 33. Search in Rotated Sorted Array (0) | 2019.02.10 |