class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
answer_row = []
for i in range(numRows):
answer_row.append([])
if numRows == 1:
return s
s_i = 1
cycle_z = numRows + (numRows - 2)
for letter in s:
if s_i > numRows:
answer_row[(2 * numRows - s_i) - 1].append(letter)
else:
answer_row[s_i - 1].append(letter)
s_i += 1
if s_i > cycle_z:
s_i = s_i % cycle_z
answer_str = ''
for seq in answer_row:
print(seq)
for ele in seq:
answer_str += ele
return answer_str
나는 이렇게 짰는데 너무 비효율적인듯해서 구글링을 해보니깐
https://piaflu.tistory.com/112
이 블로그에서 훨씬,, 간단한 아이디어로 구현하심 반성하자
알고리즘 너무 오랜만에 하니까 머리가 굳은듯 ㅠㅠ..
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
answer_row = []
for i in range(numRows):
answer_row.append([])
if numRows == 1:
return s
s_i = 0
go_down = True
for letter in s:
answer_row[s_i].append(letter)
if s_i == 0:
go_down = True
elif s_i == numRows - 1:
go_down = False
if go_down:
s_i += 1
else:
s_i -= 1
answer_str = ''
for seq in answer_row:
print(seq)
for ele in seq:
answer_str += ele
return answer_str
아이디어 너무 귀엽지 않음? 아닌가..
이래도 실행 시간은 오래 걸리는데
이건 아마도 따로 answer_row 만든다음에 string으로 이어붙여서 그런듯하다
시간을 줄이려면 letter 방식보다는 그냥 index 위주로 돌려서 한 번에 answer_str 만드는 방식으로 가야하는듯!