안녕하세요, HELLO
오늘은 Leetcode 알고리즘 문제 '6. Zigzag Conversion'에 대해서 살펴보고자 합니다.
알고리즘 문제, 코드, 해설 그리고 Leetcode에서 제공해준 solution 순서대로 정리하였습니다.
STEP 1. 'Zigzag Conversion' 알고리즘 문제
STEP 2. 'Zigzag Conversion' 코드(code)
STEP 3. 'Zigzag Conversion' 해설
STEP 4. 'Zigzag Conversion' solution
STEP 1. 'Zigzag Conversion' 알고리즘 문제
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
문자열 "PAYPALISHIRING"은 다음과 같이 지정된 수의 행에 지그재그 패턴으로 쓰여 있습니다
(가독성을 높이기 위해 이 패턴을 고정 글꼴로 표시할 수 있습니다).
And then read line by line: "PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
그리고 한 줄씩 문자열을 읽습니다: "PANNAPLSIIGYIR"
문자열을 지그재그 패턴으로 사용할 코드를 작성하고, 여러 행에 대해 변환 작업을 수행합니다.
Constraints:
- 1 <= s.length <= 1000
- s consists of English letters (lower-case and upper-case), ',' and '.'.
- 1 <= numRows <= 1000
STEP 2. 'Zigzag Conversion' 코드(code)
■ Runtime: 67 ms, faster than 78.51% of Python3 online submissions for Zigzag Conversion.
■ Memory Usage: 14 MB, less than 81.06% of Python3 online submissions forZigzag Conversion.
class Solution:
def convert(self, s: str, numRows: int) -> str:
# if numRows is one, or longer than length of s
# for example numRows is 4, and s is 'abc'
# and then iteration ends before zigzag pattern
# this line makes faster the code
if numRows == 1 or numRows >= len(s):
return s
# store text into list
# lst size is based on numRows
lst = [''] * numRows
idx, step = 0, 1
# iterated s.letters
for x in s:
lst[idx] += x
if idx == 0:
step = 1
elif idx == numRows -1 :
step = -1
# starts from the most top row
# and then goes down with 1 step
# when reach the bottom line, step turns into -1
# and then goes up with 1 step
# repeat until the s.letters
idx += step
# finally join with ''
return ''.join(lst)
STEP 3. 'Zigzag Conversion' 해설
코드를 작성하면서 참고한 유튜브 영상입니다.
URL: https://www.youtube.com/watch?v=7UQ71uwQFx4
STEP 4. 'Zigzag Conversion' solution
추가적으로, Leetcode에서 제공해준 solution 코드를 살펴보겠습니다.
■ Runtime: 76 ms, faster than 66.65% of Python3 online submissions for Zigzag Conversion.
■ Memory Usage: 14.1 MB, less than 52.83% of Python3 online submissions for Zigzag Conversion.
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows==1 or numRows>=len(s):
return s
d,ind=-1,0
res=["" for i in range(numRows)]
for i in s:
if ind==0 or ind==numRows-1:
d*=-1
res[ind]+=i
ind+=d
return ''.join(res)
■ 마무리
오늘은 Leetcode 알고리즘 문제 '6. Zigzag Conversion'에 대해서 알아봤습니다.
좋아요와 댓글 부탁드리며,
오늘 하루도 즐거운 날 되시길 기도하겠습니다 :)
감사합니다.
'PROGRAMMING > LeetCode' 카테고리의 다른 글
[Leetcode] 8. String to Integer (atoi)_해설, 풀이, 설명 (0) | 2022.04.06 |
---|---|
[Leetcode] 7. Reverse Integer_해설, 풀이, 설명 (0) | 2022.04.06 |
[Leetcode] 5. Longest Palindromic Substring_해설, 풀이, 설명 (0) | 2022.04.02 |
[Leetcode] 4. Median of Two Sorted Arrays_해설, 풀이, 설명 (0) | 2022.04.01 |
[Leetcode] 3. Longest Substring Without Repeating Characters_해설, 풀이, 설명 (0) | 2022.03.29 |
댓글